前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「EMR 运维指南」之 HiveServer2 启用 Custom 鉴权

「EMR 运维指南」之 HiveServer2 启用 Custom 鉴权

原创
作者头像
岳涛
修改2023-11-20 16:05:57
5170
修改2023-11-20 16:05:57
举报
文章被收录于专栏:大数据生态

说明

本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)

背景

HiveServer2 服务默认不启用鉴权功能,这样的话随意输入密码都能连接上,容易造成安全隐患,下面讲解下如何配置Hiveserver2 的 Custom 鉴权。这里已经编写好鉴权类代码,所以这里侧重讲配置,代码 Jar 包可以通过私信提供。

代码类中提供了两种秘钥文件存储的方式,分别基于 MetaDB 和基于本地文件存储,下面将依次介绍。

一、基于MetaDB的鉴权信息存储方案

1. 在EMR控制台 -> 组件管理 -> Hive配置管理页面,选择修改 hive-site.xml 文件,添加如下图中勾选上的几项,下面解释下这几项的含义。

参数名称

注释

hive.server2.authentication

CUSTOM

Hiveserver2服务的鉴权方式,这里选择CUSTOM。

hive.server2.custom.authentication.class

com.tencent.emr.hive.auth.CustomHiveServer2Auth

鉴权所采用的主类,值固定为我们编写的主类。

hive.server2.custom.authentication.type

com.tencent.emr.hive.auth.DBStorage

鉴权文件存储类型类,这里演示MetaDB,所以值为DBStorage。

hive.server2.custom.authentication.file

/usr/local/service/hive/conf/authFile

基于本地文件存储所用到的文件绝对路径(包含文件名)。

2. 添加完毕后下发配置,并在集群的Master节点上修改环境变量,修改 /etc/profile 文件,如下图:

添加export HIVE_CONF_DIR=$HIVE_HOME/conf 项,这里需要从 hive-site.xml 文件中获取 MetaDB 的信息,而在初始化 HiveConf 类,该类中获取配置路径时,分割符设定有些问题,所以需要手动配置下这项环境变量。配置好后执行 source /etc/profile 命令,完成变更。需要注意的是,如果是HA集群,或者有Route节点,那么两个Master节点和Route节点上都需要做该操作。

3. 将jar包放到$HIVE_HOME/lib目录下面,并更改所有者为hadoop用户,然后在控制台发起重启Hiveserver2服务流程。如下图:

4. 重启完毕之后在master节点上连接mysql,创建鉴权信息存储表。如下图:

连接上mysql后,更改操作库为 hivemetastore ,并创建鉴权信息表 AUTH_TABLE。该表有两个字段,USERNAME和PASSWORD,分别表示用户名与密码,其中用户名为主键。然后插入一条记录,表示创建一个新的用户。如下图:

完成后表示创建一个用户成功,这里涉及到的建表语句如下:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `AUTH_TABLE`(  
`USERNAME` VARCHAR(16) NOT NULL,  
`PASSWORD` VARCHAR(16) NOT NULL,
PRIMARY KEY (`USERNAME`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

5. 尝试进入beeline,使用hadoop账户连接 Hiveserver2 服务。

可以看到输入错误或者为空的密码是进不去的。到这里鉴权就结束了,下面介绍下基于本地文件存储的方案。

二、基于本地文件鉴权信息存储方案

在文档开头,我们配置了hive.server2.custom.authentication.file这个参数项,值为 /usr/local/service/hive/conf/authFile,表示鉴权信息文件存放在该目录下,文件名称为 authFile。另外我们还需要将 hive-site.xml 配置文件中的hive.server2.custom.authentication.type参数项的值改为:com.tencent.emr.hive.auth.FileStorage,表示存储类型为本地文件,更改完后需要重启下Hiveserver2服务。 1. 首先去Master节点上创建该文件,这里由于直接明文写在文件中会有安全问题,所以这里做了下md5的校验。我们通过linux命令生成MD5值并写入到该文件中,如下图:

可以看到,我们已经写入了三个账户在该文件中,写入的命令为:

echo -n 'password'|md5sum|cut -d ' ' -f1|awk -va='username,' '{print a$1}' >> authFile

其中 password 表示密码,username 表示用户名,用户名后面有个英文,逗号,用作分割。 可直接copy该命令进行增加账户操作。需要注意的是,如果是HA集群或者具有Route节点的集群,那么两个Master节点和Route节点上都需要有该文件,建议在写完该文件后,直接scp一份到其它节点上。

完成之后可直接使用增加的账户通过beeline登录hiveserver2服务进行校验。这里推荐使用DB鉴权,基于文件鉴权增加或删除用户时,如有多个节点,都需要改动,而DB只需要操作一次MetaDB库即可,并且安全。另外需要注意的是,这里为了安全性考虑,杜绝了密码为空的情况。也就是说,如果真实密码的值为空(写在DB或文件中的值为空),那么就算输入空密码,鉴权也是不会通过的。

三、修改HUE源码

注意: 启用HiveServer2的CUSTOM鉴权后,使用 hue 组件操作 hive query 时,会有一些问题,这里需要修改下 hue 的源码来做兼容,可以参照如下步骤。

1. 修改 /usr/local/service/hue/apps/beeswax/src/beeswax/server/hive_server2_lib.py 文件,增加如下几项:

注意文件中的CUSTOM。再次修改/usr/local/service/hue/desktop/conf/pseudo-distributed.ini文件中如下两项,开放注释,并配置好登录Hiveserver2服务的用户与密码。

修改完毕后,重启Hue服务,完成变更。本文基于EMR V2.1版本,Hive版本为2.3.3,Hue版本为4.4.0构建。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 背景
  • 一、基于MetaDB的鉴权信息存储方案
  • 二、基于本地文件鉴权信息存储方案
  • 三、修改HUE源码
相关产品与服务
弹性 MapReduce
弹性 MapReduce (EMR) 是基于云原生技术和泛 Hadoop 生态开源技术的安全、低成本、高可靠的开源大数据平台。提供易于部署及管理的 Hive、Spark、HBase、Flink、StarRocks、Iceberg、Alluxio 等开源大数据组件,帮助客户高效构建云端企业级数据湖技术架构。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档