6.2. Configuring Presto-Admin

A Presto cluster consists of a coordinator node and one or more workers nodes. A coordinator and worker may be located on the same node, meaning that you can have a single-node installation of Presto, but having a dedicated node for the coordinator is recommended for better performance, especially on larger clusters.

In order to use presto-admin to manage software on a cluster of nodes, you must specify a configuration for presto-admin. This configuration indicates the nodes on which to install as well as other credentials.

To set up a configuration, create a file ~/.prestoadmin/config.json (or $PRESTO_ADMIN_CONFIG_DIR/config.json if you have the presto-admin config directory set using the environment variable) with the content below as appropriate for your cluster setup. Replace the variables denoted with brackets <> with actual values enclosed in double quotations. The user specified by username must have sudo access, unless the username is root, on all the Presto nodes, and presto-admin also must be able to login to all of the nodes via SSH as that user (see SSH Configuration for details on how to set that up). The file should be owned by root with R/W permissions (i.e. 622).

Note

The sudo setup for a non-root user must have the ability to run /bin/bash as root. This can be a security issue. The IT organization should take the necessary steps to address this security hole and select an appropriate presto-admin user.

Configuration for Amazon EMR

Use the following configuration as a template for Amazon EMR:

{
"username": "hadoop",
"port": "<ssh_port>",
"coordinator": "<EMR_master_node_host_name>",
"workers": ["<host_name_1>", "<host_name_2>", ... "<host_name_n>"],
"java8_home":"<path/to/java8/on/presto/nodes>"
}

Also, for running Presto Admin commands on Amazon EMR, do the following:

  • Copy the .pem file associated with the Amazon EC2 key pair to the Presto Admin installation node of the EMR cluster.

  • Use the -i </path/to/your.pem> input argument when running presto-admin commands on the node.

    </path/to/presto-admin> -i </path/to/your.pem> <presto_admin_command>
    

Configuration for other clusters

Use the following configuration as a template for other clusters:

{
"username": "<ssh_user_name>",
"port": "<ssh_port>",
"coordinator": "<host_name>",
"workers": ["<host_name_1>", "<host_name_2>", ... "<host_name_n>"],
"java8_home":"<path/to/java8/on/presto/nodes>"
}

Do not use localhost as host_name for a multi-node cluster. All of the properties are optional, and if left out the following defaults will be used:

{
"username": "root",
"port": "22",
"coordinator": "localhost",
"workers": ["localhost"]
}

Note that java8_home is not set by default. It only needs to be set if Java 8 is in a non-standard location on the Presto nodes. The property is used to tell the Presto RPM where to find Java 8.

Note

If you have installed the JDK, java8_home should be set so refer to the jre subdirectory of the JDK.

You can also specify some but not all of the properties. For example, the default configuration is for a single-node installation of Presto on the same node that presto-admin is installed on. For a 6 node cluster with default username and port, a sample config.json would be:

{
"coordinator": "master",
"workers": ["slave1","slave2","slave3","slave4","slave5"]
}

You can specify a range of workers by including the number range in brackets in the worker name. For example:

"workers": ["worker[01-03]"]

is the same as

"workers": ["worker01", "worker02", "worker03"]

Sudo Password Specification

Please note that if the username you specify is not root, and that user needs to specify a sudo password, you do so in one of two ways. You can specify it on the command line:

./presto-admin <command> -p <password>

Alternatively, you can opt to use an interactive password prompt, which prompts you for the initial value of your password before running any commands:

./presto-admin <command> -I
Initial value for env.password: <type your password here>

The sudo password for the user must be the same as the SSH password.