亚马逊AWS官方博客
EMR Hive 读写分离
背景
为了在 Hive 数据库中实现对表操作的细粒度控制,我们在创建 EMR 集群的时候,需要启用 Kerberos 和 Apache Ranger 等安全组件。默认情况下,集群本身并不会具备细力度的控制,例如对表的增删改查操作等。但是,引入 Kerberos 和 Apache Ranger 会让系统变的更复杂,管理和运维难道也增加。
有时候我们可能并不需要对表中的内容进行非常细粒度的控制,例如某个字段的读写控制,而只是希望让表本身能够实现读写分离。例如,我们希望产生数据的应用系统能够对表进行增删改查操作;而对于分析团队,只需要提供只读操作。
本文就是详细描述如何在 EMR 集群里对 Hive 下的某个数据库下的表实现读写分离。
客户实际场景和架构说明
1、初始状态:系统整个数仓系统采用 Hive,构建在 EMR 上,数仓的访问权限只能通过其 CDP/MA 应用进行访问,不对外开放其它用户。
2、经过一段时间运行后,系统积累了大量的数据。企业的 BI 分析团队,也希望能够通过 BI 工具访问数仓系统。系统提供方不希望 BI 团队能够修改和删除数仓中的表,避免因为误操作导致系统崩溃。
3、在运行的 EMR 集群上无法 Enable Kerbose和Ranger。
现状的 EMR 集群的配置信息
- EMR 版本号 :6.10.0
- 组件: Hive 3.1.3
- Master(1 台):xlarge,Core(3 台):m5.2xlarge
具体实现步骤
修改 EMR 集群 hive-site 参数
在 EMR 控制台配置如下 hive-site 参数:
1、进入 EMR 集群
2、进入配置页面
3、对集群节点的 Instance group configurations 进行配置
选择实例组,点击右上角的 Reconfigure,添加上面说的两项内容,然后保存
对其它实例组做同样的配置。
在 master 节点上创建 linux 的只读用户
1、先进入集群
2、打开 Master 节点的控制 console
依次执行如下命令:
1)创建一个 linux 用户: adduser pingyou
2)切换到 hadoop 用户: sudo su – hadoop
3)通过 hadoop 创建一个 pingyou 的用户目录,让 pingyou 这个用户有权限访问hdfs
- 执行如下命令:hadoop fs -mkdir /user/pingyou
- 然后给 pingyou 这个用户相应的权限:hadoop fs -chown pingyou:supergroup /user/pingyou
4)进入 hive (进入 hive 的一定是创建数据库和表的这个用户,我这边用的是 hadoop 这个用户)
执行 grant 权限,将相应的表的 select 权限赋予 pingyou 这个用户
进入自己的 db,然后给权限:GRANT SELECT ON TABLE my_table TO USER pingyou;
如下图所示:
测试验证
1、用上一步创建的用户 pingyou 登陆
退出 hive,退出当前 hadoop 用户,然后进入到刚才创建的 pingyou 这个用户
2、测试增删改操作
进入 hive,进入数据库:use test_db;
执行 truncate,drop,create,insert 操作,测试验证
3、测试 select 操作