暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Apache Ranger授权Amazon EMR上的SparkSQL数据操作

826


从 Amazon EMR 5.32 开始,Amazon EMR 引入了 Apache Ranger 2.0 支持,这让您可以为 Apache Spark、Amazon Simple Storage Service(Amazon S3) 和 Apache Hive 启用授权和审计功能。它还允许在 Amazon CloudWatch 中记录授权审计。但是,尽管您可以使用这些授权功能控制 Apache Spark 向 Amazon S3 的写入操作,但 SparkSQL 支持仅限于读取授权。

我们很高兴地宣布,借助 Amazon EMR 6.4,Apache Ranger SparkSQL 集成能够支持数据操作语句(DML)的授权功能。现在,您可以使用 Apache Ranger 策略,为 SparkSQL 授权 INSERT INTO、INSERT OVERWRITE 和 ALTER 语句。


No.1

架构概览



Amazon EMR 使用 Amazon EMR 记录服务器实现了对 Apache SparkSQL 的支持,该服务器会读取 Apache Ranger 策略定义、评估访问权限并筛选数据,然后再将数据传回各个 Spark 执行程序。

下图显示了简要的架构。


No.2

实施细节



在开始之前,请设置您的 Apache Ranger 和 Amazon EMR 集群。有关说明,请参阅 Amazon EMR 与 Apache Ranger 的集成简介。如果您在 Apache Ranger 服务器上的现有安装已经部署了 Apache Spark 服务定义,请使用以下代码重新部署服务定义:


# 获取调用 Ranger REST API 和 JSON 处理程序的现有 Spark 服务定义 ID
curl --silent -f -u <admin_user_login>:<password_for_ranger_admin_user> \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef/name/amazon-emr-spark' | jq .id

# 下载最新的服务定义
wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-spark.json

# 使用 Ranger REST API 更新服务定义
curl -u <admin_user_login>:<password_for_ranger_admin_user> -X PUT -d @ranger-servicedef-amazon-emr-spark.json \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef/<id-you-got from step1>'

*左右滑动查看更多


现在服务定义已更新,我们可以开始测试策略。

对于我们的使用场景,假设您有一个由外部 Amazon S3 支持的分区 Hive 表。您想要使用 SparkSQL DML 语句将数据插入到表中。

使用以下代码来定义表:


CREATE EXTERNAL TABLE IF NOT EXISTS students_s3 (name VARCHAR(64), address VARCHAR(64)) 
PARTITIONED BY (student_id INT
STORED AS PARQUET
LOCATION 's3://xxxxxx/students_s3/'

*左右滑动查看更多


现在,您可以在 Apache Ranger 上设置授权策略。以下屏幕截图说明了此过程。

因为表由 Amazon S3 在外部提供支持,我们首先需要启用针对表的 Amazon S3 位置的读写访问权限。如果该位置位于 HDFS 上,则 URL 应具有 HDFS 路径,例如 hdfs://xxxx。



接下来,我们添加 SELECT、UPDATE 和 ALTER 权限,以允许用户使用 DML 命令。对表元数据(如统计数据或分区信息)的任何更新都需要 ALTER 权限。



设置了这些 Apache Ranger 策略之后,我们就可以开始测试 DML 语句。下面是 INSERT INTO 语句的代码示例:


spark.conf.set("hive.exec.dynamic.partition.mode", "nonstrict")
spark.sql("INSERT INTO students_s3 VALUES ('Amy Smith''123 Park Ave, San Jose'231111)")
studentsSQL = spark.sql("
select * from default.students_s3 where student_id=231111")
studentsSQL.show()

*左右滑动查看更多


以下屏幕截图显示了结果。


与其他操作类似,我们可以在Amazon CloudWatch 上审计此操作。



No.3

限制



对于分区位置不同于表位置的分区,当前不支持在其中插入数据。分区位置必须始终是主表位置的子目录。



No.4

现已推出



在以下区域中,从 Amazon EMR 6.4 版开始,Amazon EMR 支持通过 Apache Ranger 授权 SparkSQL 语句 INSERT INTO、INSERT OVERWRITE 和 ALTER TABLE。
美国东部(俄亥俄)
美国东部(弗吉尼亚北部)
美国西部(加利福尼亚北部)
美国西部(俄勒冈)
非洲(开普敦)
亚太地区(香港)
亚太地区(孟买)
亚太地区(首尔)
亚太地区(新加坡)
亚太地区(悉尼)
加拿大(中部)
欧洲(法兰克福)
欧洲(爱尔兰)
欧洲(伦敦)
欧洲(巴黎)
欧洲(米兰)
欧洲(斯德哥尔摩)
南美洲(圣保罗)
中东(巴林)


 有关最新可用区域的信息,请参阅 Amazon EMR 管理指南


No.5

结论



Amazon EMR 6.4 为 Apache Ranger 2.0 的数据操作语句引入了额外的授权功能。您可以在 SparkSQL 中使用 INSERT INTO、INSERT OVERWRITE 和 ALTER 等语句,并使用 Apache Ranger 策略控制授权。


No.6

相关资源



有关其他信息,请参阅以下资源:

· Amazon EMR 与 Apache Ranger 的集成简介

· 将 Amazon EMR 与 Apache Ranger 集成

· Amazon EMR 6.3 现在支持 Apache Ranger 进行细粒度的数据访问控制

· 在 Amazon EMR 上使用 Apache Ranger 实施授权和审计


本篇作者


Varun Rao Bhamidimarri

亚马逊云科技分析专家解决方案构架师团队的高级经理


工作重点是帮助客户采用支持云的分析解决方案,以满足客户业务需求。在工作之外,他喜欢与妻子和两个孩子共度欢乐时光,享受健康的生活方式,进行冥想,最近在疫情封城期间开始从事园艺活动。

Jalpan Randeri

亚马逊云科技的高级软件工程师


对于大数据系统的性能优化和数据访问控制工作,他乐此不疲。在工作之余,他喜欢看动漫和玩电子游戏。


听说,点完下面4个按钮

就不会碰到bug了!

文章转载自亚马逊云开发者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论