如何为Presto集成Kerberos环境下的Hive

2018-07-12 15:58:55 浏览数 (1)

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

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实操

0 人点赞