介绍
presto是由facebook开源,基于内存的分布式查询引擎。支持多数据源,可支持PB级海量数据查询,本身不作数据存储。由于基于内存查询,减少了IO开销,故查询效率很高,但不适用于多表联合查询。
架构
与众多分布式框架类似,由某组件进行请求处理以及分发任务至各执行节点。在presto架构中,Coordinator即为这样的角色。负责解析SQL,生成执行计划,分发任务到各节点。
Worker即各实际执行查询的节点。worker收到任务后,通过各种connector取各数据源中的数据。
Discovery service即联系Coordinator及Worker的服务。Worker启动会向Discovery server注册服务,Coordinator向Discovery server获取Worker节点信息。
配置
presto主要配置文件如下:
catalog/:配置各数据源的信息,如hive,mongdb等。以hive为例:
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
hive.allow-drop-table=true
config.properties:presto的配置文件,coordinator与worker略有不同。
coordinator中基本配置:
coordinator=true
node-scheduler.include-coordinator=true
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
jvm.config:JVM启动时的配置信息
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
log.properties:配置日志级别信息
com.facebook.presto=DEBUG
node.properties:每个节点的配置信息
node.environment=集群名称
node.id=节点ID (各节点不同)
node.data-dir=/presto (数据目录,包括配置,日志等)
启动
presto启动较为简单,在安装目录bin下启动 ./launcher start (restart/stop)。日志记录在节点配置所指定的相应目录下server.log。