Presto是一个facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。
presto的架构由关系型数据库的架构演化而来。presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点:
Presto 支持 SQL 并提供了一个标准数据库的语法特性,但其不是一个通常意义上的关系数据库,他不是关系数据库,如 MySQL、PostgreSQL 或者 Oracle 的替代品。Presto 不是设计用来解决在线事物处理(OLTP);
Presto 是一个工具,被用来通过分布式查询来有效的查询大量的数据。Presto 是一个可选的工具,可以用来查询 HDFS,通过使用 MapReduce 的作业的流水线,例如 hive,pig,但是又不限于查询 HDFS 数据,它还能查询其他的不同数据源的数据,包括关系数据库以及其他的数据源,比如 cassandra;
Presto 被设计为处理数据仓库和分析:分析数据,聚合大量的数据并产生报表,这些场景通常被定义为 OLAP。
多数据源,支持SQL,自定义扩展Connector
混合计算(同一种数据源的不同库 or表;将多个数据源的数据进行合并)
低延迟,高并发,纯内存计算引擎,高性能
Presto是一个低延迟高并发的内存计算引擎,相比Hive,执行效率要高很多。
举例:
SELECT id,
name,
source_type,
created_at
FROM dw_dwb.dwb_user_day
WHERE dt='2018-06-03'
AND created_at>’2018-05-20’;
上述SQL在Presto运行时间不到1秒钟,在Hive里要几十秒钟。
presto提供插件化的connector来支持外部数据查询,原生支持hive、cassandra、elasticsearch、kafka、kudu、mongodb、mysql、redis等众多外部数据源;
Presto使用Catalog、Schema和Table这3层结构来管理数据。
在Presto中定位一张表,一般是catalog为根,例如:一张表的全称为 hive.test_data.test,标识 hive(catalog)下的 test_data(schema)中test表。
可以简理解为:数据源的大类.数据库.数据表。
http://10.139.8.12
路径 /opt/software/presto
server: presto-server-0.233.1.tar.gz
clicent: presto-cli-0.219-executable.jar
1.server解压
tar -zxvf /opt/software/presto/presto-server-0.233.1.tar.gz -C /opt/module/presto-0.233.1/
2.文件 cp
cp /opt/software/presto/presto-cli-0.223.1.jar /opt/module/presto-0.233.1/presto-server-0.233.1/bin
cp /opt/software/presto/presto-cli-0.219-executable.jar /opt/module/presto-0.233.1/presto-server-0.233.1/bin
3.重命名
mv /opt/module/presto-0.233.1/presto-server-0.233.1/bin/presto-cli-0.219-executable.jar /opt/module/presto-0.233.1/presto-server-0.233.1/bin/presto-cli
4.增加 presto 的执行权限
chmod +x /opt/module/presto-0.233.1/presto-server-0.233.1/bin/presto-cli
在 presto server 安装目录 /opt/module/presto-0.233.1/presto-server-0.233.1 创建 etc 文件夹
mkdir /opt/module/presto-0.233.1/presto-server-0.233.1/etc
在 /opt/module/presto-0.233.1/presto-server-0.233.1/etc 下创建 config.properties,jvm.properties,node.properties,log.properties 文件
vim config.properties
config.properties内容
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8888
query.max-memory=1GB
query.max-memory-per-node=512MB
query.max-total-memory-per-node=512MB
discovery-server.enabled=true
discovery.uri=http://10.139.8.12:8888
部分配置信息解释
jvm.config内容
vim jvm.config (Presto集群coordinator和worker的JVM配置是一致的)
-server
-Xmx2G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
node.properties内容
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/module/presto-0.233.1/data
log.properties内容(INFO、DEBUG)
com.facebook.presto=DEBUG
在 /opt/module/presto-0.233.1/presto-server-0.233.1/etc 创建 catalog 目录
mkdir /opt/module/presto-0.233.1/presto-server-0.233.1/etc/catalog
在 catalog 目录下 创建 hive connector
vim hive.properties
connector.name=hive-hadoop2 #注意 connector.name 只能是 hive-hadoop2
hive.metastore.uri=thrift://hadoop101:9083
hive.config.resources=/etc/hadoop/core-site.xml,/etc/hadoop/hdfs-site.xml
vim mysql.properties
connector.name=mysql
connection-url=jdbc:mysql://hadoop101:3306
connection-user=root
connection-password=123456
vim postgresql.properties
connector.name=postgresql
connection-url=jdbc:postgresql://10.139.8.12:5432/quartz
connection-user=postgres
connection-password=idqc_pg@12!
vim kafka.properties
connector.name=kafka
kafka.table-names=table1,table2
kafka.nodes=host1:port,host2:port
服务路径 /opt/module/presto-0.233.1/presto-server-0.233.1/bin/
以后台方式启动
launcher start
以调试方式启动,输出并打印日志(日志在 数据目录 /opt/module/presto-0.233.1/data/var/log)
/opt/module/presto-0.233.1/presto-server-0.233.1/bin/launcher --verbose run
帮助语法
launcher --help
停止服务
launcher --stop
前端页面地址
以连接12postgresql数据源为例,./bin/presto-cli --server http://10.139.8.12:8888 --catalog postgresql
各参数的含义:
进入终端后:
Presto使用手册:https://prestodb.io/docs/current/
阿里云开源组件 presto 介绍:https://help.aliyun.com/document_detail/64035.html?spm=a2c4g.11186623.6.819.7433ab6aQBJ8F5
presto 官方地址(英文) https://prestodb.io/
presto 京东官方地址 http://prestodb.jd.com/
Presto 在有赞的实践之路 https://cloud.tencent.com/developer/news/606849