逍遥谷

记录日常的点点滴滴

0%

Presto搭建

Presto安装

1、下载

1
wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/<VERSION>/presto-server-<VERSION>.tar.gz

2、解压

1
tar -zxvf presto-server-<VERSION>.tar.gz -C /usr/local

创建数据目录和解压目录

Presto配置

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

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

节点属性(Node Properties)

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

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

node.environment:环境名字,Presto集群中的节点的环境名称都必须一样。

node.id:唯一标识,每个节点的标识都必须是唯一的。就算重启或者升级都必须保持原来的标识。

node.data-dir:数据目录,Presto用来存放日志及其他数据。

JVM配置(JVM Config)

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

以下是参考配置:

1
2
3
4
5
6
7
8
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

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

配置属性(Config Properties)

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

以下是参考coordinator的最小配置:

1
2
3
4
5
6
7
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的最小配置:

1
2
3
4
5
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,则使用以下配置:

1
2
3
4
5
6
7
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
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监听。

Catalog属性(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:

1
connector.name=jmx

hive的注册,创建etc/catalog/hive.properties,参考最小配置如下:

1
2
3
4
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

运行Presto

启动命令:

1
2
bin/launcher start

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

运行Presto命令行界面

  1. 下载 presto-cli--executable.jar
  2. 修改名字 presto-cli--executable.jar为 presto
  3. 修改执行权限chmod +x
  4. 运行
1
./presto --server localhost:8080 --catalog hive --schema default