亚马逊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 集群的配置信息

  1. EMR 版本号 :6.10.0
  2. 组件: Hive 3.1.3
  3. Master(1 台):xlarge,Core(3 台):m5.2xlarge

具体实现步骤

修改 EMR 集群 hive-site 参数

在 EMR 控制台配置如下 hive-site 参数:

< property>
    < name>hive.security.authorization.enabled< /name>
    < value>true< /value>
     < description>enable or disable the hive client authorization< /description>
 < /property>< property>
     < name>hive.security.authorization.createtable.owner.grants< /name>
     < value>ALL< /value>
     < description>the privileges automatically granted to the owner whenever a table gets created. An example like "select,drop" will grant select and drop privilege to the owner of the table< /description>
< /property>

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

  1. 执行如下命令:hadoop fs -mkdir /user/pingyou
  2. 然后给 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 操作

本篇作者

黄海波

亚马逊云科技高级架构师。负责亚马逊云科技合作伙伴相关解决方案的建设以及合作伙伴生态合作。与合作伙伴一起,根据客户需求,分析其在技术架构层面所遇到的挑战和未来的方向,设计和落地基于亚马逊云科技平台和合作伙伴产品的架构方案。曾在知名外企任职高级系统架构师,高级研发工程师,有丰富的系统设计和研发经验。

叶骏

亚马逊云科技资深解决方案架构师。拥有超过 18 年的零售行业、制造行业以及数字营销领域的技术产品研发和解决方案架构经验。目前专注于将 AWS 云平台技术应用于实际解决方案,为客户实现技术创新和成功的技术落地。