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

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

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文件命令

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目录下

[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文件,内容如下:

[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文件,内容如下:

[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增加如下配置

<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集群所有节点的服务

[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并赋予可以执行权限

https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.205/presto-cli-0.205-executable.jar

(可左右滑动)

[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

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

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

如何使用Nginx实现Impala负载均衡

在使用Impala JDBC连接Impala服务时,默认是不带负载均衡的,但一个Impala Daemon很可能会产生单点的问题,这里我们就需要考虑Impala...

57580
来自专栏Hadoop实操

如何使用StreamSets实现MySQL中变化数据实时写入Kudu

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

1.8K110
来自专栏云计算教程系列

如何在Debian 9上以独立模式安装Hadoop

Hadoop是一个基于Java的编程框架,支持在廉价机器集群上处理和存储极大数据集。它是大数据竞争领域的第一个主要开源项目,由Apache Software F...

24310
来自专栏Hadoop实操

如何在CDH集群外配置Kerberos环境的Spark2和Kafka客户端环境

28130
来自专栏Spark学习技巧

必读:再讲Spark与kafka 0.8.2.1+整合

Kafka在0.8和0.10版本引入了新的消费者API,所以spark Streaming与kafka的整合提供了两个包。 请根据你的集群选用正确的包。注意,...

43370
来自专栏Hadoop实操

如何在CDH集群上部署Python3运行环境及运行Python作业

当前有很多工具辅助大数据分析,但最受欢迎的就是Python。Python简单易用,语言有着直观的语法并且提供强大的科学计算和集群学习库。借着最近人工智能,深度学...

89940
来自专栏架构师小秘圈

HDFS极简教程

HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Goog...

36460
来自专栏Hadoop实操

如何编译适用于CDH的Tez版本并集成Kerberos环境的Hive2

在上一篇文章Fayson介绍了《非Kerberos环境下Hive2.2.0 On Tez集成》,使用Apache官网默认编译好的0.8.5版本的Tez,默认的版...

58620
来自专栏企鹅号快讯

如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

23080
来自专栏Hadoop实操

如何通过Cloudera Manager为Kafka启用Kerberos及使用

在CDH集群中启用了Kerberos认证,那么我们的Kafka集群能否与Kerberos认证服务集成呢?本篇文章主要讲述如何通过Cloudera Manager...

66290

扫码关注云+社区

领取腾讯云代金券