转载请注明出处:http://blog.csdn.net/u012842205/article/details/61622565
一、简介
Presto作为一种分布式数据SQL引擎,致力于交互式的类SQL(兼容 ASCI SQL)低延迟查询(秒级到分钟级),完全基于内存的运行计算。支持多种数据源查询,包括Hive,Cassandra,甚至是关系型数据库。其支持处理的数据量在GB到PB之间。。由Facebook提供开源,目前国内Presto京东版本有开源。目前官方没有提供Presto到HBase的集成方案(Connector)。
本文主要叙述在分布式节点上搭建Presto服务的整个过程与所遇到的注意事项。笔者搭建Presto主要利用Hive元数据,实现SQL对HDFS文件(由Hive映射成表)的交互式查询。所依赖的组件如下,其安装过程本文不再赘述:
Apache HDFS 2.7.3 Apache Hive 2.1.1 JDK 1.8.0以上所有组件运行于CentOS系统:CentOS Linux release 7.2.1511 (Core)。
Presto安装版本为0.167。分布式环境为一个master节点和五个slave节点。其中master节点运行coordinary,所有slave节点各自运行一个worker。
注意:Presto官方文档建议所有worker都运行在有DataNode实例的节点上(本文中五个slave节点都各运行了一个HDFS的DataNode)。
二、安装
presto安装比较简单。从官方网站下载0.167版本的Presto部署包(https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.167/presto-server-0.167.tar.gz,从这个地址可以看出部署包发布在maven镜像中)。
1、源码安装
若不是源码安装而是直接下载了部署包,请跳过此小结直接解压。源码安装资料主要看github的README。使用源码还需安装maven和python,用于编译过程。笔者安装过程中使用的版本如下:
Python 2.7.13 Apache Maven 3.3.0
解压源码后,进入项目根目录,编译:
# 编译并测试 mvn clean install # 编译不测试 mvn clean install -DskipTests待编译完成后将在目录prestodb-server-rpm的target/dependency下产生部署包(后缀*.tar.gz),此部署包与从maven镜像下载的基本一样。
2、解压
将部署包直接复制到各个节点并解压。部署根路径有如下主要目录:
plugin/:所有插件(Connector),Presto支持链接的数据源,如Cassandra,Hive等,Presto通过插件进行数据源的扩展。
lib/:所有依赖jar。
bin/:运行脚本。
3、配置
Presto配置非常清晰,配置文件有四个,分别配置虚拟机(jvm.config)、集群信息(config.properties)、节点信息(node.properties)和日志配置(log.properties)。所有配置文件存在部署根目录的etc/路径下,若没有此路径请自行创建(使用mkdir)。各个节点配置可以一致,也可以按照节点硬件性能个性化配置。
(1)jvm.config
此配置文件中所有配置项与jvm配置项相同,且每行配置一项。由于这些选项不在shell命令中使用。 因此即使将每个选项通过空格或者其他的分隔符分开,presto程序也不会将这些选项分开,而是作为一个命令行选项处理。以下是示例配置:
-server -Xmx4G -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:G1HeapRegionSize=32M -XX:PermSize=2G
-Xmx4G表示配置了4G最大堆内存
-XX:PermSize=2G表示持久代最大为2G
config.properties是最重要的配置文件,主要配置当前节点的运行角色和一些集群相关信息。
coordinator = true node-scheduler.include-coordinator = true http-server.http.port = 3600 discovery-server.enabled = true discovery.uri = http://Master1:3600
coordinator表示此节点是否作为一个coordinator。每个节点可以是一个worker,也可以同时是一个coordinator,但作为性能考虑,一般大型机群最好将两者分开。
若coordinator设置成true,则此节点成为一个coordinator。若node-scheduler.include-coordinator设置成true,则成为一个worker,两者可以同时设置成true,此节点拥有两种身份。上面配置了此节点即是一个coordinator,又是一个worker。
http-server.http.port配置调用端口,此端口号3600用于客户端调用,用于节点间通信。
discovery-server.enabled:Presto 通过Discovery 服务来找到集群中所有的节点。为了能够找到集群中所有的节点,每一个Presto实例都会在启动的时候将自己注册到discovery服务。Presto为了简化部署,并且也不想再增加一个新的服务进程,Presto coordinator 可以运行一个内嵌在coordinator 里面的Discovery 服务。这个内嵌的Discovery 服务和Presto共享HTTP server并且使用同样的端口。
另外还有一些配置,这里再提一个内存配置,每个task所能使用的最大memory:
task.max-memory=1GB
(3)节点信息
node.properties主要配置节点的身份信息,用于集群中唯一识别。
node.environment = joinbright_presto node.id = 562e42e2-e874-431f-8da5-cb779744cf7c node.data-dir = /home/presto/data/presto-data
node.environment 表示集群名称,一个可以识别的字符串,注意,此配置项必须所有节点(处于同一集群)都配置相同。
node.id 表示集群中能唯一识别的id,这个可以使用一个GUID,比如使用工具随机生成一个GUID,配置到这个字段上,注意:每个节点这个值都不相同。
node.data-dir 数据存储目录的位置(操作系统上的路径)。Presto将会把日期和数据存储在这个目录下。
(4)日志配置
log.properties,此配置文件很像log4j的配置文件。但我没有尝试个性化配置。以下是官方文档的配置推荐。
com.facebook.presto = INFO
三、运行启动
每个节点都需要手动启动,切换到Presto部署根目录运行下面命令。
运行后台进程:
bin/launcher start
或者输入输出流直接写到stdout和stderr:
bin/launcher run另外,使用--help可以获取帮助信息。
由于上例配置了node.data-dir路径,所以在此路径下的var/logs将会产生配置文件,目前有三个配置文件:
launcher.log: 这个日志文件由launcher创建,并且server的stdout和stderr都被重定向到了这个日志文件中。 这份日志文件中只会有很少的信息,包括在server日志系统初始化的时候产生的日志和JVM产生的诊断和测试信息。
server.log: 这个是Presto使用的主要日志文件。一般情况下,该文件中将会包括server初始化失败时产生的相关信息。这份文件会被自动轮转和压缩。
http-request.log: 这是HTTP请求的日志文件,包括server收到的每个HTTP请求信息,这份文件会被自动轮转和压缩。
四、参考资料
官网:https://prestodb.io
github:https://github.com/prestodb/presto
其他:
http://www.linuxidc.com/Linux/2015-07/119958.htm