Presto0.167安装部署

时间:2022-01-16 00:52:03

转载请注明出处: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


(2)集群信息

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