Presto是一个开源的分布式SQL查询引擎,数据量支持GB到PB级别,主要用来处理秒级查询的场景。其他概念性的知识点以及Presto的优缺点这边就不细说,开始这篇文章的重点吧~
一、准备工作
我们先在官网 https://prestodb.github.io/ 里下载所需的安装包:server、cli、jdbc-driver都下载。这边有3台Presto节点,1台主节点也就是coordinator,另外2台worker节点。(下面主节点简称Master,从节点简称Worker)
之后把3个安装包放到服务器上,先解压presto-server-0.229.tar.gz,命令是 tar -zxvf presto-server-0.229.tar.gz -C xxx(你指定的路径)。
二、配置文件
然后进入presto目录,创建文件夹data用来存储数据,
继续创建文件夹etc用来存储数据
进入etc目录下,创建catalog/hive.properties 、jvm.config、config.properties、node.properties,这些相应的配置官网上都有教程,这边就简单过一下。
先打开并编辑jvm.config,这是官网推荐JVM的配置,生产环境下可以相应的更改。
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
到这边位置,我们先将当前节点的Presto文件夹分发到另外2台节点,也就是说当前节点作为Master,另外2台作为Worker。
然后编辑Master的node.properties文件
node.environment=production
node.id=1
node.data-dir=xxxxx/presto-0.228/data
node.id 可以自定义更改,数字或是字符都可以,只要求3台Presto节点的node.id必须不相同,所以另外2台节点node.id记得更改,这边另外2台node.id分别改为2、3,node-data-dir指定到一开始创建的data目录下。
接下来编辑config.properties
Master的config.properties配置
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery-server.enabled=true
discovery.uri=http://主机名:8881
另外2台worker的config.properties配置
coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://主机名:8881
简单解释一下这里的配置
coordinator:表示这台是否作为Master节点用来管理从节点和进行资源分配调度的作用。
node-scheduler.include-coordinator:false表示不包含工作节点,也就是这台单独作为Presto的管理节点不进行工作,生产环境下建议false,可以提高Presto集群性能。
http-server.http.port:表示Presto节点间通信端口8881 。
query.max-memory:表示单个查询在整个集群的最大内存,关于内存的配置,建议根据自己的服务器资源和业务需求进行配置,Presto是基于内存的MPP框架,对内存需要有严格的配置,这块建议大家在生产环境下,需要重点关注。
discovery-server.enabled:表示是否被其他Presto节点所发现。
discovery.uri:为其他节点连接主节点的地址端口,这里端口要和上面配置的端口一致。
最后编辑catalog下的hive.properties,记得确认下节点上的hive metastore服务开启了,这里是Presto连接多种数据源的配置,如果你要连接Mysql,就去找相应的连接器配置,官网有提供案例,这边我们连接hive。
3台节点的hive.properties配置一致
connector.name=hive-hadoop2
hive.metastore.uri=thrift://元数据节点主机名:9083
三、启动
到这一步基本配置已经好了,然后启动3台节点的presto服务,先启动Master节点,在启动Woker节点。
启动命令:
这两个命令的区别是run会前台执行,日志会打印在控制台上,start则会在后台运行,日志不打印在前台,可以在data/var/log/下查看,第一次启动建议run运行,方便查看配置状态情况。关闭服务命令为bin/launcher stop或直接kill掉该服务进程号。
看到SERVER STARTED表示服务启动成功。记得3台都要启动服务。
然后准备客户端,将presto-cli-0.228-executable.jar放到Presto的安装根目录下,重命名为prestocli并赋予执行权限chmod 777 prestocli,之后我们启动客户端:
./prestocli --server Master主机名:8881 --catalog hive --schema default
有时会提示Cluster is still initializing 这时候只要等一会他初始化好就可以
--server :指的是前面配置好的Master主机名和端口号
--catalog:指的是数据源类型为hive
--schema:指的是连接hive的数据库,这里是default库
进行简单测试:查看表 show tables;
查找数据:select * from sqoop_executors;
假如你的集群没有Kerberos认证,那到这里已经完成Presto的部署了,如果hive集群有Kerberos认证,就只要多配置一步----配置hive连接器,由于hive是有kerberos认证的,一般公司服务器上都已经建好主体并配好票据了,这边不细说了,如果没有主体和配置的话就建一个吧(我也不太深入了解kerberos,haha~),我们要做的就是指定好这个票据keytab的配置,由于hive依赖hdfs上,所以也要通过下hdfs的kerberos认证。官网上其实也有配置案例,但这部分对新人(我)来说开始有点坑,下面我会说。
connector.name=hive-hadoop2
hive.metastore.uri=thrift:/元数据节点主机名:9083
hive.config.resources=/xxx/core-site.xml,/xxx/hdfs-site.xml
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/[email protected]
hive.metastore.client.principal=票据主体名@xxx.COM
hive.metastore.client.keytab=/xxxx/票据主体名.keytab
hive.hdfs.authentication.type=KERBEROS
#hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=票据主体名@xxx.COM
hive.hdfs.presto.keytab=/xxxx/票据主体名.keytab
不清楚的小伙伴可以使用 klist 查看下当前你当前的主体是什么。
这时候我踩过的坑来了,按道理说我们照着官网配置了 hive连接器的Kerberos,应该还会想着还有其他部分的认证吧,我当时就是这么想的,所以我把当时所有有关Kerberos认证能配的都给配了
这也是我写着文档的原因,我在这里面一直里里外外配置,然后也网上找了很多类似的,比如说我配置了启动命令参数:
./prestocli
--server
--krb5-config-path
--krb5-principal
--krb5-keytab-path
--krb5-remote-service-name
--keystore-path
--keystore-password
--catalog
--schema
或者是配置了config.properties的:
http-server.authentication.type
http.server.authentication.krb5.service-name
http.server.authentication.krb5.keytab
http.authentication.krb5.config
http-server.https.enabled
http-server.https.port
http-server.https.keystore.path
http-server.https.keystore.key
等等。总之网上的一些的教程都让我配置这些,可是启动Presto连show tables 都不能显示出表。现在想想真的差点放弃了。果然新人搞Kerberos不懂原理超级吃亏啊。其实不管是启动参数和config.properties的配置 都不需要在动了。我们只需要在hive.properties新增那几项配置参数就可以了,客户端cli和http-server这些不需要再配置。虽然官网的启动命令是一大串,但实际上我们用最简单的登录方式就可以正常使用了:
./prestocli \
--server Master主机名:7778 \
--catalog hive \
--schema default \
--user hive
至于合理的解释我想可能是前面我们已经在配置好了hive元数据和Kerberos的票据,所以在启动命令上我们不需要再指定那些配置了,我们看看官网启动客户端的命令——
虽然我至今不知道为什么和官网的启动有出入却能成功,反而照着官网的命令却不能连接。对于像我这样第一次接触的新人来说,虽然看官网必不可少,但一定不能太盲目,我之前始终坚信官网是对的(当然我不是否定它),从来没有怀疑过也就导致了我失去探索的工匠精神,在出现问题时,不要一味的坚信或否定一些你认为对的事,这些事往往可能成为解决问题的良机~