Presto部署

安装Presto

1.下载

wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.200/presto-server-0.200.tar.gz

官网下载最新版本: 点我进入官网下载 ,注意选择presto-server

2.解压

tar -zxvf presto-server-0.200.tar.gz -C /usr/local/

/usr/local/presto-server-0.200则为安装目录,另外Presto还需要数据目录,数据目录最好不要在安装目录里面,方便后面Presto的版本升级。

配置Presto

在安装目录里创建etc目录。这目录会有以下配置:

  • 结点属性(Node Properties):每个结点的环境配置
  • JVM配置(JVM Config):Java虚拟机的命令行选项
  • 配置属性(Config Properties):Persto server的配置
  • Catelog属性(Catalog Properties):配置Connector(数据源)

结点属性(Node Properties)

结点属性文件etc/node.properties,包含每个结点的配置。一个结点是一个Presto实例。这文件一般是在Presto第一次安装时创建的。以下是最小配置:

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data

node.environment: 环境名字,Presto集群中的结点的环境名字都必须是一样的。
node.id: 唯一标识,每个结点的标识都必须是为一的。就算重启或升级Presto都必须还保持原来的标识。
node.data-dir: 数据目录,Presto用它来保存log和其他数据,建议放在自己定义的目录下

JVM配置(JVM Config)

JVM配置文件etc/jvm.config,包含启动Java虚拟机时的命令行选项。格式是每一行是一个命令行选项。此文件数据是由shell解析,所以选项中包含空格或特殊字符会被忽略。

以下是参考配置:

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

注意:如果ExitOnOutOfMemoryError报错,注释即可

因为OutOfMemoryError会导致JVM存在不一致状态,所以用heap dump来debug,来找出进程为什么崩溃的原因。

配置属性(Config Properties)

配置属性文件etc/config.properties,包含Presto server的配置。Presto server可以同时为coordinator和worker,但一个大集群里最好就是只指定一台机器为coordinator。
以下是coordinator的最小配置:

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080

以下是worker的最小配置:

coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
discovery.uri=http://example.net:8080

如果适用于测试目的,需要将一台机器同时配置为coordinator和worker,则使用以下配置:

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=2GB
query.max-memory-per-node=512MB
discovery-server.enabled=true
discovery.uri=http://example.net:8080

coordinator: 是否运行该实例为coordinator(接受client的查询和管理查询执行)。
node-scheduler.include-coordinator:coordinator: 是否也作为work。对于大型集群来说,在coordinator里做worker的工作会影响查询性能。
http-server.http.port:指定HTTP端口。Presto使用HTTP来与外部和内部进行交流。
query.max-memory: 查询能用到的最大总内存
query.max-memory-per-node: 查询能用到的最大单结点内存
discovery-server.enabled: Presto使用Discovery服务去找到集群中的所有结点。每个Presto实例在启动时都会在Discovery服务里注册。这样可以简化部署,不需要额外的服务,Presto的coordinator内置一个Discovery服务。也是使用HTTP端口。
discovery.uri: Discovery服务的URI。将example.net:8080替换为coordinator的host和端口。这个URI不能以斜杠结尾,这个错误需特别注意,不然会报404错误

另外还有以下属性:
jmx.rmiregistry.port: 指定JMX RMI的注册。JMX client可以连接此端口
jmx.rmiserver.port: 指定JXM RMI的服务器。可通过JMX监听。

详情请查看Resource Groups

Catelog属性(Catalog Properties)

Presto通过connector访问数据。而connector是挂载(mount)在catelog中。connector支持catelog里所有的schema和table。举个例子,Hive connector映射每个Hive数据库到schema,因此Hive connector挂载在hive catelog(所以可以把catelog理解为目录,挂载),而且Hive包含table clicks在数据库web,所以这个table在Presto是hive.web.clicks。
Catalog的注册是通过etc/catalog目录下的catalog属性文件。例如,创建etc/catalog/jmx.properties,将jmxconnector挂载在jmx catelog:

connector.name=jmx

查看Connectors查看更多信息。

启动命令:

bin/launcher start

日志在val/log目录下:
launcher.log: 记录服务初始化情况和一些JVM的诊断。
server.log: Presto: 的主要日志文件。会自动被压缩。
http-request.log: 记录HTTP请求。会自动被压缩。

配置MySQL Connector

创建etc/catalog/mysql.properties

connector.name=mysql
connection-url=jdbc:mysql://example.net:3306
connection-user=root
connection-password=secret

配置Hive Connector

创建etc/catalog/hive.properties

connector.name=hive-hadoop2
hive.metastore.uri=thrift://example.net:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

还可以在jvm.config中Hadoop的代理用户

-DHADOOP_USER_NAME=hdfs_user

运行Presto命令行界面

1.下载 presto-cli-0.200-executable.jar(下载最新版),
2.修改名字 presto-cli-0.200-executable.jar为 presto
3.修改执行权限chmod +x
4.运行

指定catelog

./presto --server localhost:8080 --catalog hive --schema default

不指定catelog,可在命令行使用多个catalog

./presto --server localhost:8080

注意: JDK必须大于jdk-8u151

hive join mysql

select * from hive.default.emp a join mysql.tunan.dept b on a.deptno = b.deptno;

 empno | ename  |    job    | jno  |    date    |  sal   | prize  | deptno | deptno |   dname    | level 
-------+--------+-----------+------+------------+--------+--------+--------+--------+------------+-------
7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.0 | NULL | 20 | 20 | RESEARCH | 1800
7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600.0 | 300.0 | 30 | 30 | SALES | 1900
7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250.0 | 500.0 | 10 | 10 | ACCOUNTING | 1700
7566 | JONES | MANAGER | 7839 | 1981-4-2 | 2975.0 | NULL | 10 | 10 | ACCOUNTING | 1700
7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250.0 | 1400.0 | 30 | 30 | SALES | 1900

命令帮助: help

Author: Tunan
Link: http://yerias.github.io/2020/05/03/presto/2/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.