温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
在CDH官方文档中有说明,在集群启用了Sentry以后建议禁用Hive CLI,以防止用户绕过Sentry的授权,官方建议通过配置代理用户组的方式来实现。具体可以参考Fayson之前的文章《如何在CDH启用Kerberos的情况下安装及使用Sentry(二)》中第六章备注。采用此方式禁用Hive CLI之后,我们在使用Spark访问Hive的过程中发现,如果执行Spark作业的用户没有在Hive的代理用户中配置则该用户是没有权限访问Hive Metastore的。对于平台用户来说往往会有很多租户使用Spark访问Hive,这样需要在Hive的代理中配置多个组,不合理并不便于管理,以下Fayson会讨论几种实现禁用的方式。
2.禁用Hive CLI
方式1:
采用《如何在CDH启用Kerberos的情况下安装及使用Sentry(二)》中第六章备注的方式,即通过配置代理用户的方式限制只能某些用户可以使用Hive CLI,通常是Hive的管理员,这个是官方建议的方式。具体可以参考超链接中的文章。
方式2:
采用Hive官网上的实现方式,在执行hive命令前设置环境变量的方式
USE_DEPRECATED_CLI=false
(可左右滑动)
可以在CM上进行配置,如下:
配置完成后,重新部署客户端及重启依赖的服务,在命令行使用hive命令验证
通过上述执行结果可以看到在执行hive命令时会自动的转到beeline的方式访问Hive。
方式3:
修改/opt/cloudera/parcels/CDH/lib/hive/bin/hive脚本文件方式
在脚本中找到如下代码:
if [ "$SERVICE" = "" ] ; then
if [ "$HELP" = "_help" ] ; then
SERVICE="help"
else
SERVICE="cli"
fi
fi
(可左右滑动)
将代码修改为如下:
if [ "$SERVICE" = "" ] ; then
if [ "$HELP" = "_help" ] ; then
SERVICE="help"
else
echo "Hive CLI is disabled"
exit
#SERVICE="cli"
fi
fi
(可左右滑动)
在命令行执行hive命令测试
注意该方式也需要修改Hive执行命令脚本的权限,防止其他用户直接修改了该脚本文件的权限,具体修改方法参考方式4,如下。
方式4:
直接将hive的脚本的权限修改为700仅root用户可以执行
chmod 700 /opt/cloudera/parcels/CDH/lib/hive/bin/hive
(可左右滑动)
使用非root用户执行hive命令
3.总结
1.方式1是默认官方建议的方式,存在的问题主要是导致Spark SQL无法访问Hive Metastore。
2.方式2是Apache Hive官方的一种方式,但是很容易被任何用户绕过该限制,只需要在执行Hive CLI之前在export一次环境变量即可。
3.方式3和方式4的思路基本一致,只是方式3多了一个稍微友好的提示告诉用户Hive CLI已被禁用,然后通过修改脚本的权限来最终限制住普通用户执行Hive CLI。弊端在于需要在集群的所有节点修改hive脚本,并且在集群做升级后需要再次进行修改。另外该方式没办法阻止用户自己组织脚本内容来使用Hive CLI。
4.综上所述,Fayson个人建议在CDH集群中启用Sentry后,没必要禁用Hive CLI,虽然Sentry管不了Hive CLI,但毕竟Hive表底层的HDFS文件还有一层安全控制,而这一层的安全是通过Sentry的HDFS ACL同步来实现的。只是这种方式就会导致使用Hive CLI的用户没办法细粒度到column或view的权限,不过已经无伤大雅了,IT用户不用将这么细的内容告诉业务/开发用户即可。
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
如果需要在你的电脑上通过浏览器阅读Fayson的Hadoop实操的所有文章,你可以访问腾讯云+社区上Fayson的主页,查看所有历史文章,链接地址为:
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操