基于FI/MRS平台使使用客户端连接hive和hdfs认证问题总结
基于MRS的一些DAYU数据服务可能需要自己创建一些数据连接去使用MRS/FI集群的hive ,中间经常会遇到一些问题。
该部分总结基于安全模式的FusionInsight平台或者安全模式的MRS集群
§ 建立hive数据连接时的认证问题
§ driver端进行hive认证
首先要知道hive用户的keytab位置、kdc.conf位置和hive用户名(用户是FI的用户)
然后使用以下代码,进行认证登录
1javax.security.auth.login.Configuration.setConfiguration(new ZKSignerSecretProvider.JaasConfiguration("Client",2loginUser, keytabPath));
hiveurl参考:
jdbc:hive2://18.211.150.241:24002,18.211.150.246:24002,18.211.151.36:24002/dqc;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;sasl.qop=auth-conf;auth=KERBEROS;principal=hive/hadoop.hadoop.com@HADOOP.COM;
/dqc是hive库名
§ executor端进行hive认证
由于executor端是不知道keytab文件路径的,并且使用beam的jdbcIO读hive时,是没法做keytab认证的,因此要做一些特殊处理
在spark.default配置中增加spark.yarn.dist.innerfiles一项,填入keytab文件位置。这样就会传到spark的executor上,并会处于当前jvm程序的执行目录下。
hive的连接url改一下,在末尾加上user.principal(用户名)和user.keytab(用不带路径的keytab名字), 变成
jdbc:hive2://18.211.150.241:24002,18.211.150.246:24002,18.211.151.36:24002/dqc;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;sasl.qop=auth-conf;auth=KERBEROS;principal=hive/hadoop.hadoop.com@HADOOP.COM;user.principal=dqcuser;user.keytab=dqcuser.keytaborg.apache.hive.hive-jdbc版本使用FI提供的1.3.0版本
§ hdfs认证
beam提供的hdfs sdk不适用于安全模式的FI集群,需要自己写1个hdfsClient,然后用在processElement中。如果hdfsClient未初始化或者未认证,则进行认证操作,然后再进行读或者写hdfs。
hdfs认证需要 keytab文件、kdf.conf、hdfs-site.xml和core-site.xml, 需要的文件较多,我们可以在提交spark任务时,把这4个文件打成zip压缩包,然后通过spark-default配置的spark.yarn.dist.innerarchives配置,在里面增加这个压缩包的路径。
添加之后,当程序运行在executor节点时,会自动把该压缩包解压成 压缩包名.zip的目录,然后从这个目录里去读文件即可。
- 点赞
- 收藏
- 关注作者
评论(0)