作为OLAP的一员,presto发挥着连接异构数据源的重要作用,目前presto已经集成了20多种数据源,可谓是非常丰富,官方还提供了自定义插件开发接口。所以,倘若你的数据源支持jdbc且使用的是标准的sql语法,那么只需要简单几步就可以整合其他数据源,比如clickhouse/kylin等。
本文只介绍presto安装部署教程,其余内容其他文章会说明。
presto官网:facebook开源 http://prestodb.io
ps:京东也有一套presto代码,但是在15年的时候就不维护了。所以亲们建议看facebook的就可以了。
此教程版本
presto 0.237.2
去官方下载一个presto-server-xxx.tar
解压目录
drwxr-xr-x. 3 root root 4096 Aug 18 09:57 bin
drwxr-xr-x. 3 root root 4096 Aug 24 15:02 etc
drwxr-xr-x. 2 root root 12288 Aug 18 09:57 lib
drwxr-xr-x 2 root root 4096 Aug 24 14:24 logs
-rw-r--r--. 1 root root 191539 Aug 18 09:58 NOTICE
drwxr-xr-x. 34 root root 4096 Aug 24 09:51 plugin
-rw-r--r--. 1 root root 126 Aug 18 09:58 README.txt
跟大多数中间件一样,
bin:主程序启动的二进制文件
etc:配置文件
lib:默认依赖包
logs:日志位置
plugin:插件包(重点,后续自定义插件都需要在这里配置)
此处需要配置4个基本配置,再单独配置数据源connector。
注意:源文件是没有创建的,这里要手动创建,不要有疑惑,干就是了
vi etc/config.properties
coordinator=true # 是否coordinator节点
node-scheduler.include-coordinator=false # 是否work节点
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://{hostname}:8080
以上配置为纯coordinator节点的配置。
presto有两个角色,分别是coordinator和worker
一般的,配置一个coordinator节点就足够了,起协调集群作用。
这里再提供worker节点的配置
coordinator=false
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://testcdh001:8080
若单节点部署,可以使用以下方案
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.uri=http://testcdh001:8080
vi etc/jvm.config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
vi etc/log.properties
com.facebook.presto=INFO
vi etc/node.properties
node.environment=production
node.id=myPrestoNode1
node.data-dir=/var/presto/data
ps: 若集群部署,node.environment必须一致,且保证node.id唯一
前面是配置presto启动的相关参数,接下来要配置集成数据源,这里有格式要求。这里拿hive举个例子
vi etc/catalog/hive.properties
connector.name=hive-hadoop2
hive.metastore.uri=thrift://{hostname}:9083
hive.config.resources=/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/etc/hadoop/conf.empty/core-site.xml,/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/etc/hadoop/conf.empty/hdfs-site.xml
hive.config.resources 配置hdfs的配置,分别是core-site.xml, hdfs-site.xml
./bin/launcher start --server-log-file=./logs/server.log
以后台方式启动,查看server.log是否正常
去官方下载presto-cli-{version}-executable.jar,为presto客户端工具
执行以下命令连接presto
/opt/presto-server-0.237.2/presto-cli-0.237.2-executable.jar --server {hostname}:8080
连接成功后,测试在presto上查询hive数据
假设我的hive表存储结构为
database:default
table:emp
那么在presto查询时,语法为
select * from hive.default.emp;
ok,若能返回结果,则恭喜你,可以开始使用presto的更多功能了。
比如说,集成mysql,然后hive跟mysql聚合查询
select * from hive.default.emp as emp inner join mysql.default.dept as dept on emp.deptid = dept.deptid;