Presto是一个分布式SQL查询引擎, 它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。Presto的运行模型和Hive或MapReduce有着本质的区别。Hive将查询翻译成多阶段的MapReduce任务, 一个接着一个地运行。 每一个任务从磁盘上读取输入数据并且将中间结果输出到磁盘上。 然而Presto引擎没有使用MapReduce。它使用了一个定制的查询和执行引擎和响应的操作符来支持SQL的语法。除了改进的调度算法之外, 所有的数据处理都是在内存中进行的。 不同的处理端通过网络组成处理的流水线。 这样会避免不必要的磁盘读写和额外的延迟。 这种流水线式的执行模型会在同一时间运行多个数据处理段, 一旦数据可用的时候就会将数据从一个处理段传入到下一个处理段。 这样的方式会大大的减少各种查询的端到端响应时间。
Presto查询引擎是一个Master-Slave的架构,由一个Coordinator节点,一个Discovery Server节点,多个Worker节点组成,Discovery Server通常内嵌于Coordinator节点中。Coordinator负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。Worker节点负责实际执行查询任务。Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。如果配置了Hive Connector,需要配置一个Hive MetaStore服务为Presto提供Hive元信息,Worker节点与HDFS交互读取数据。
image.png
Presto支持从以下版本的Hadoop中读取Hive数据:支持以下文件类型:Text, SequenceFile, RCFile, ORC
此外,需要有远程的Hive元数据。 不支持本地或嵌入模式。 Presto不使用MapReduce,只需要HDFS.
https://prestodb.io/docs/current/installation/deployment.html
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/
sudo mkdir /opt/bigdata
sudo mkdir /opt/bigdata/presto
sudo mkdir /opt/bigdata/presto/data
目录/opt/bigdata/presto/
sudo tar -zxvf /opt/bigdata/presto/presto-server-0.208.tar.gz
sudo mkdir /opt/bigdata/presto/presto-server-0.208/catalog
sudo mkdir /opt/bigdata/presto/presto-server-0.208/etc
sudo chgrp -R ec2-user /opt/bigdata
sudo chown -R ec2-user /opt/bigdata
在presto目录下创建etc目录,并在etc目录下,创建以下配置文件
包含了Presto server的所有配置信息。 每个Presto server既是一个coordinator也是一个worker。 但是在大型集群中,处于性能考虑,建议单独用一台机器作为 coordinator,一个coordinator的etc/config.properties应该至少包含以下信息:
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=9000
query.max-memory=30GB
query.max-total-memory-per-node=6GB
query.max-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://10.111.0.0:9000
参数说明:
coordinator=false
http-server.http.port=9000
query.max-memory=30GB
query.max-total-memory-per-node=10GB
query.max-memory-per-node=2GB
discovery.uri=http://10.111.0.0:9000
包含针对于每个节点的特定的配置信息。 一个节点就是在一台机器上安装的Presto实例,etc/node.properties配置文件至少包含如下配置信息
node.environment=presto
node.id=
node.data-dir=/opt/bigdata/presto/data
参数说明:
包含一系列在启动JVM的时候需要使用的命令行选项。这份配置文件的格式是:一系列的选项,每行配置一个单独的选项。由于这些选项不在shell命令中使用。 因此即使将每个选项通过空格或者其他的分隔符分开,java程序也不会将这些选项分开,而是作为一个命令行选项处理,信息如下:
-server
-Xmx10G
-Xms10G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:ReservedCodeCacheSize=150M
-XX:CMSInitiatingOccupancyFraction=70
这个配置文件中允许你根据不同的日志结构设置不同的日志级别。每个logger都有一个名字(通常是使用logger的类的全标示类名). Loggers通过名字中的“.“来表示层级和集成关系,信息如下:
com.facebook.presto=DEBUG
配置日志等级,类似于log4j。四个等级:DEBUG,INFO,WARN,ERROR
通过在etc/catalog目录下创建catalog属性文件来完成catalogs的注册。 例如:可以先创建一个etc/catalog/jmx.properties文件,文件中的内容如下,完成在jmxcatalog上挂载一个jmxconnector
connector.name=jmx
在etc/catalog目录下创建hive.properties,信息如下:
connector.name=hive-hadoop2
hive.metastore.uri=thrift://10.111.0.0:9083
hive.config.resources=/opt/bigdata/hadoop/hadoop-2.8.0/etc/hadoop/core-site.xml, /opt/bigdata/hadoop/hadoop-2.8.0/etc/hadoop/hdfs-site.xml
hive.allow-drop-table=true
在安装目录的bin/launcher文件,就是启动脚本。Presto可以使用如下命令作为一个后台进程启动:
bin/launcher start
也可以在前台运行, 可查看具体的日志
bin/launcher run
停止服务进程命令
bin/launcher stop
查看进程:
ps -aux|grep PrestoServer 或 jps
https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/
./presto-cli-0.208-executable.jar --server 10.111.0.86:9000 --catalog hive --schema db_name;