温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github: https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
在前面的文章Fayson介绍了《如何在CDH集群中部署Presto》以及Presto与Hive的集成,本篇文章Fayson主要介绍如何为Presto集成Kerberos环境下的Hive。
- 内容概述:
1.环境准备
2.Presto与Kerberos环境Hive集成
3.Presto与Hive集成测试
4.总结
- 测试环境:
1.CM5.14.3/CDH5.14.2
2.Presto版本0.205
3.操作系统版本为Redhat7.3
4.采用root用户进行操作
5.集群已启用Kerberos且Hive服务正常运行
6.集群已启用Sentry
2.环境准备
1. Presto部署节点及角色说明
IP地址 | HOSTNAME | NodeID | 角色 |
---|---|---|---|
172.27.0.4 | cdh01.fayson.com | presto-cdh01 | coordinator |
172.27.0.11 | cdh02.fayson.com | presto-cdh02 | worker |
172.27.0.7 | cdh03.fayson.com | presto-cdh03 | worker |
172.27.0.3 | cdh04.fayson.com | presto-cdh04 | worker |
Presto服务的安装目录为/opt/cloudera/parcels/presto
2.准备Presto访问Hive的Kerberos账号并生成keytab文件
这里Fayson使用presto用户来访问HiveMetastore及HDFS,如下是Fayson创建Kerberos账号和导出Keytab文件命令
代码语言:javascript复制kadmin.local -q "addprinc -randkey presto/admin@FAYSON.COM"
kadmin.local -q "xst -norandkey -k presto.keytab presto/admin@FAYSON.COM"
(可左右滑动)
3.将生成presto.keytab文件拷贝至Presto集群所有节点的/opt/cloudera/parcels/presto/etc目录下
代码语言:javascript复制[root@cdh01 shell]# sh bk_cp.sh node.list /root/presto.keytab /opt/cloudera/parcels/presto/etc/
(可左右滑动)
3.Presto集成Kerberos环境Hive
1.修改Presto集群的${PRESTO_HOME}/etc/catalog/hive.properties文件,内容如下:
代码语言:javascript复制[root@cdh01 catalog]# pwd
/opt/cloudera/parcels/presto/etc/catalog
[root@cdh01 catalog]# vim hive.properties
connector.name=hive-hadoop2
hive.metastore.uri=thrift://cdh01.fayson.com:9083
#配置Presto访问HiveMetastore服务的Kerberos信息,该段配置可以只存在Presto的Coordinator节点
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/_HOST@FAYSON.COM
hive.metastore.client.principal=presto/admin@FAYSON.COM
hive.metastore.client.keytab=/opt/cloudera/parcels/presto/etc/presto.keytab
#配置Presto访问HDFS的Kerberos信息,改段配置可以只存在Presto的Worker节点
hive.hdfs.authentication.type=KERBEROS
hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=presto/admin@FAYSON.COM
hive.hdfs.presto.keytab=/opt/cloudera/parcels/presto/etc/presto.keytab
(可左右滑动)
在hive.properties配置文件中增加访问HiveMetastore和HDFS的Kerberos认证信息,将如上配置同步至Presto集群所有节点的${PRESTO_HOME}/etc/catalog/hive.properties文件中。
注意:在配置hive.metastore.url时,需要使用HiveMetastore服务的HOSTNAME,否则在使用Kerberos访问HiveMetastore时会报找不到Kerberos账号的错误。
2.修改Presto的JVM参数,创建jvm.config文件,内容如下:
代码语言:javascript复制[root@cdh01 presto-etc]# vim jvm.config
-server
-Xmx8G
-XX: UseConcMarkSweepGC
-XX: ExplicitGCInvokesConcurrent
-XX: CMSClassUnloadingEnabled
-XX: AggressiveOpts
-XX: HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:ReservedCodeCacheSize=150M
-Djava.security.krb5.conf=/etc/krb5.conf
-Dsun.security.krb5.debug=true
(可左右滑动)
在jvm.conf文件中增加java.security.krb5.conf和sun.security.krb5.debug配置,用于指定krb5.conf和配置Kerberos的Debug模式。
3.登录Cloudera进入HDFS服务,搜索core-site.xml增加如下配置
代码语言:javascript复制<property>
<name>hadoop.proxyuser.presto.hosts</name>
<value>*</value>
</property>
<property><name>hadoop.proxyuser.presto.groups</name>
<value>*</value>
</property>
(可左右滑动)
配置完成,根据提示重启CDH集群。
由于hive.properties配置文件中Fayson配置了presto用户访问HDFS,并且启用了用户模拟的功能,所以需要在core-site.xml中增加presto用户代理配置。
4.修改完以上配置后重启Presto服务,重启Presto集群所有节点的服务
代码语言:javascript复制[root@cdh01 ~]# /opt/cloudera/parcels/presto/bin/launcher restart
(可左右滑动)
4.Presto与Hive集成测试
这里测试Presto与Hive的集成使用Presto提供的Presto CLI,该CLI是一个可执行的JAR文件,也意味着你可以想UNIX终端窗口一样来使用CLI。
1.下载Presto的presto-cli-0.205-executable.jar,并重命名为presto并赋予可以执行权限
代码语言:javascript复制https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.205/presto-cli-0.205-executable.jar
(可左右滑动)
代码语言:javascript复制[root@cdh01 presto-etc]# mv presto-cli-0.205-executable.jar presto
[root@cdh01 presto-etc]# chmod x presto
[root@cdh01 presto-etc]# ll presto
(可左右滑动)
2.在命令行执行命令访问Hive
代码语言:javascript复制/root/presto-etc/presto
--server http://cdh01.fayson.com:8080
--catalog hive
--schema default
--user hive
(可左右滑动)
执行Select和Count操作
登录Presto的8080界面查看SQL执行记录
可以看到在使用CLI访问Hive时,指定了user用户为hive,执行SQL是会模拟hive用户访问Hive。
5.总结
1.Fayson在集成Kerberos环境的Hive时,使用presto用户访问HiveMetastore和HDFS服务。
2.如果在访问HDFS服务中启用了用户模拟功能则需要在到HDFS的core-site.xml文件中增加presto用户的代理配置。
3.因为集群启用了Sentry,在使用Presto的CLI进行测试时,需要指定user为hive用户,有权限访问Hive的所有表,指定其它用户则需要为其它用户授权,否则在访问表时会报无权限访问HDFS目录。
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操