说明: 本次使用的安装包为 presto-server-0.196.tar.gz 大小(461M)
《官网》可下载的最新版本 presto-server-0.266.tar.gz 大小(1.1G)
🐌 我使用的是乞丐版 (1核2G) 的腾讯云服务器,故安装体积较小的版本进行测试。
1.Presto安装配置
1.1 安装
安装是一如既往的简单:
tar -zxvf presto-server-0.196.tar.gz mv presto-server-0.196 /usr/local/presto
1.2 配置
官网有详细的《配置说明》参考官网进行配置(看似是最新版本的说明,其实大家都懂的)😄
在安装目录中(我的是/usr/local/presto
)创建一个etc
目录。在这个目录中放入以下配置信息:
- 节点属性:每个节点的环境配置信息
- JVM 配置:JVM 的命令行选项
- 配置属性:Presto server 的配置信息
- Catalog属性:configuration for Connectors(数据源)的配置信息
1️⃣ 节点属性(Node Properties)
节点属性配置文件:etc/node.properties 包含针对于每个节点的特定的配置信息。一个节点就是在一台机器上安装的Presto实例。这份配置文件一般情况下是在 Presto 第一次安装的时候,由部署系统创建的。一个 etc/node.properties 配置文件至少包含如下配置信息:
node.environment=production node.id=ffffffff-ffff-ffff-ffff-ffffffffffff node.data-dir=/var/presto/data
本次使用的配置为:
node.environment=production node.id=presto-tcloud node.data-dir=/usr/local/presto-data
配置信息描述如下:
- node.environment:集群名称。所有在同一个集群中的 Presto 节点必须拥有相同的集群名称。
- node.id:每个 Presto 节点的唯一标示。每个节点的 node.id 都必须是唯一的。在 Presto 进行重启或者升级过程中每个节点的 node.id 必须保持不变。如果在一个节点上安装多个 Presto 实例(例如:在同一台机器上安装多个 Presto 节点),那么每个 Presto 节点必须拥有唯一的 node.id。
- node.data-dir: 数据存储目录的位置(操作系统上的路径)。Presto 将会把日期和数据存储在这个目录下
(官方建议此目录放在安装目录之外)
。
2️⃣ JVM配置
JVM 配置文件(老生常谈的配置了),etc/jvm.config, 包含一系列在启动 JVM 的时候需要使用的命令行选项。这份配置文件的格式是:一系列的选项,每行配置一个单独的选项。由于这些选项不在 shel l命令中使用。 因此即使将每个选项通过空格或者其他的分隔符分开,java 程序也不会将这些选项分开,而是作为一个命令行选项处理。
-server -Xmx16G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError
本次使用的配置为:
-server -Xmx1G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError
由于 OutOfMemoryError 将会导致 JVM 处于不一致状态,所以遇到这种错误的时候我们一般的处理措施就是将 dump headp 中的信息(用于 debugging),然后强制终止进程。Presto 会将查询编译成字节码文件,会生成很多class,需要增大 Perm 区的大小(在 Perm 中主要存储 class)并且要允许 Jvm class unloading。
3️⃣ 配置属性(Config Properties)
Presto 的配置文件:etc/config.properties 包含了 Presto server 的所有配置信息。每个 Presto server 既是一个 coordinator
n. 协调人,统筹者
也是一个 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=5GB query.max-memory-per-node=1GB query.max-total-memory-per-node=2GB discovery-server.enabled=true discovery.uri=http://example.net:8080
本次使用的配置为:
coordinator=true node-scheduler.include-coordinator=true http-server.http.port=8883 query.max-memory=1GB discovery-server.enabled=true discovery.uri=http://tcloud:8883
配置信息描述:
- coordinator:指定是否运维 Presto 实例作为一个 coordinator (接收来自客户端的查询情切管理每个查询的执行过程)。
- node-scheduler.include-coordinator:是否允许在 coordinator 服务中进行调度工作。对于大型的集群,在一个节点上的 Presto server 即作为 coordinator 又作为 work e将会降低查询性能。因为如果一个服务器作为 worker 使用,那么大部分的资源都不会被 worker 占用,那么就不会有足够的资源进行关键任务调度、管理和监控查询执行。
- http-server.http.port:指定 HTTP server 的端口。Presto 使用 HTTP 进行内部和外部的所有通讯。
- query.max-:查询相关的内存设置。
- discovery-server.enabled:Presto 通过 Discovery 服务来找到集群中所有的节点。为了能够找到集群中所有的节点,每一个Presto实例都会在启动的时候将自己注册到 discovery 服务。Presto 为了简化部署,并且也不想再增加一个新的服务进程,Presto coordinator 可以运行一个内嵌在 coordinator 里面的Discovery 服务。这个内嵌的Discovery 服务和 Presto 共享 HTTP server 并且使用同样的端口。
- discovery.uri:Discovery server 的 URI。由于启用了 Presto coordinator 内嵌的 Discovery 服务,因此这个 uri 就是 Presto coordinator 的 uri。
注意:
这个URI一定不能以“/“结尾。 - task.max-memory:一个单独的任务使用的最大内存 (一个查询计划的某个执行部分会在一个特定的节点上执行)。 这个配置参数限制的GROUP BY语句中的Group的数目、JOIN关联中的右关联表的大小、ORDER BY语句中的行数和一个窗口函数中处理的行数。 该参数应该根据并发查询的数量和查询的复杂度进行调整。如果该参数设置的太低,很多查询将不能执行;但是如果设置的太高将会导致JVM把内存耗光。
其他配置:
You may also wish to set the following properties:
- jmx.rmiregistry.port: Specifies the port for the JMX RMI registry. JMX clients should connect to this port.
- jmx.rmiserver.port: Specifies the port for the JMX RMI server. Presto exports many metrics that are useful for monitoring via JMX.
4️⃣ 日志级别
日志配置文件:etc/log.properties。在这个配置文件中允许你根据不同的日志结构设置不同的日志级别。每个 logger 都有一个名字(通常是使用 logger 的类的全标示类名)Loggers 通过名字中的
.
来表示层级和集成关系。 (像java里面的包)log 配置信息本次使用的也是这个配置
:
com.facebook.presto=INFO
5️⃣ Catalog Properties
- Presto 通过 connectors 访问数据。这些 connectors 挂载在 catalogs 上。connector 可以提供一个catalog 中所有的 schema 和表。例如:Hive connector 将每个 hive 的 database 都映射成为一个schema,所以如果 hive connector 挂载到了名为 hive 的 catalog,并且在 hive 的 web 有一张名为 clicks 的表,那么在 Presto 中可以通过 hive.web.clicks 来访问这张表。
- 通过在 etc/catalog 目录下创建 catalog 属性文件来完成 catalogs 的注册。例如:可以先创建一个etc/catalog/jmx.properties 文件,文件中的内容如下,完成在 jmxcatalog 上挂载一个 jmxconnector:
connector.name=jmx
可查看 Connectors 的 详细配置选项 。
1.3 启动
安装目录下的 bin/launcher 文件就是启动脚本。Presto可以使用如下命令作为一个后台进程启动:
[root@tcloud presto]# bin/launcher start Started as 19648
另外,也可以在前台运行,日志和相关输出将会写入 stdout/stderr(可以使用类似 daemontools 的工具捕捉这两个数据流):
bin/launcher run
其他命令:
bin/launcher --help Usage: launcher [options] command Commands: run, start, stop, restart, kill, status Options: -h, --help show this help message and exit -v, --verbose Run verbosely --etc-dir=DIR Defaults to INSTALL_PATH/etc --launcher-config=FILE Defaults to INSTALL_PATH/bin/launcher.properties --node-config=FILE Defaults to ETC_DIR/node.properties --jvm-config=FILE Defaults to ETC_DIR/jvm.config --config=FILE Defaults to ETC_DIR/config.properties --log-levels-file=FILE Defaults to ETC_DIR/log.properties --data-dir=DIR Defaults to INSTALL_PATH --pid-file=FILE Defaults to DATA_DIR/var/run/launcher.pid --launcher-log-file=FILE Defaults to DATA_DIR/var/log/launcher.log (only in daemon mode) --server-log-file=FILE Defaults to DATA_DIR/var/log/server.log (only in daemon mode) -D NAME=VALUE Set a Java system property
启动完之后,日志将会写在设置的node.data-dir
目录下的 var/log 目录下,有如下文件:
- launcher.log:这个日志文件由 launcher 创建,并且 server 的 stdout 和 stderr 都被重定向到了这个日志文件中。这份日志文件中只会有很少的信息,包括:在server日志系统初始化的时候产生的日志和JVM产生的诊断和测试信息。
- server.log:这个是Presto使用的主要日志文件。一般情况下,该文件中将会包括server初始化失败时产生的相关信息。这份文件会被自动轮转和压缩。
- http-request.log: 这是HTTP请求的日志文件,包括server收到的每个HTTP请求信息,这份文件会被自动轮转和压缩。
# server.log 的最后一行 2021-12-07T12:00:19.703+0800 INFO main com.facebook.presto.server.PrestoServer ======== SERVER STARTED ========
1.4 验证
前端验证 http://tcloud:8883
:
2. Yanagishima安装配置
2.1 Quick Start
Yanagishima的GitHu 有 Quick Start:
git clone https://github.com/yanagishima/yanagishima.git cd yanagishima git checkout -b [version] refs/tags/[version] ./gradlew distZip cd build/distributions unzip yanagishima-[version].zip cd yanagishima-[version] vim config/application.yml nohup bin/yanagishima-start.sh >y.log 2>&1 &
2.2 安装配置
本次部署的是编译后的yanagishima-18.0.zip
文件,解压文件即可:
编译后文件云盘:
链接:https://pan.baidu.com/s/1626_ym21H9n4lfcah2YbMw
提取码:iur5
unzip yanagishima-18.0.zip
简单配置一下安装目录下的 /conf/yanagishima.properties :
jetty.port=7080 presto.datasources=root-presto presto.coordinator.server.root-presto=http://tcloud:8883 sql.query.engines=presto
2.3 启动验证
我的安装目录是/home/presto/yanagishima-18.0/
,目录下有启动和停止的 shell 脚本:
# 在安装目录下执行-进行启动启动 nohup bin/yanagishima-start.sh >y.log 2>&1 & # 在安装目录下执行-停止 nohup bin/yanagishima-shutdown.sh
前端验证 http://tcloud:7080
:
3. 总结
工具的安装部署并不复杂,关键在使用~