Presto 的部署与连接有Kerberos认证的Hive集群

Presto是一个开源的分布式SQL查询引擎,数据量支持GB到PB级别,主要用来处理秒级查询的场景。其他概念性的知识点以及Presto的优缺点这边就不细说,开始这篇文章的重点吧~


一、准备工作

我们先在官网 https://prestodb.github.io/ 里下载所需的安装包:server、cli、jdbc-driver都下载。这边有3台Presto节点,1台主节点也就是coordinator,另外2台worker节点。(下面主节点简称Master,从节点简称Worker)

download.jpg

之后把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.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、3node-data-dir指定到一开始创建的data目录下。

接下来编辑config.properties

Master的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

Worker

另外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。

Connector

3台节点的hive.properties配置一致

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;

show tables

查找数据:select * from sqoop_executors;

假如你的集群没有Kerberos认证,那到这里已经完成Presto的部署了,如果hive集群有Kerberos认证,就只要多配置一步----配置hive连接器,由于hive是有kerberos认证的,一般公司服务器上都已经建好主体并配好票据了,这边不细说了,如果没有主体和配置的话就建一个吧(我也不太深入了解kerberos,haha~),我们要做的就是指定好这个票据keytab的配置,由于hive依赖hdfs上,所以也要通过下hdfs的kerberos认证。官网上其实也有配置案例,但这部分对新人(我)来说开始有点坑,下面我会说。

hive的Kerberos支持
hive配置kerberos认证案例
hdfs认证案例

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 查看下当前你当前的主体是什么。

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的票据,所以在启动命令上我们不需要再指定那些配置了,我们看看官网启动客户端的命令——

官网的客户端连接命令

虽然我至今不知道为什么和官网的启动有出入却能成功,反而照着官网的命令却不能连接。对于像我这样第一次接触的新人来说,虽然看官网必不可少,但一定不能太盲目,我之前始终坚信官网是对的(当然我不是否定它),从来没有怀疑过也就导致了我失去探索的工匠精神,在出现问题时,不要一味的坚信或否定一些你认为对的事,这些事往往可能成为解决问题的良机~ 

你可能感兴趣的:(Presto 的部署与连接有Kerberos认证的Hive集群)