本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Apache Spark 插件
亚马逊EMR已经进行了整合 EMR RecordServer ,为Spark提供了精细的访问控制。SQLEMR's RecordServer 是一个在启用 Apache Ranger 的集群上的所有节点上运行的特权进程。当 Spark 驱动程序或执行器运行 Spark SQL 语句时,所有元数据和数据请求都会通过。 RecordServer要了解更多信息 EMR RecordServer,请参阅亚马逊EMR组件页面。
支持的特征
SQL声明/护林员动作 | STATUS | 支持的EMR版本 |
---|---|---|
SELECT |
支持 |
截至 5.32 |
SHOW DATABASES |
支持 |
截至 5.32 |
SHOW COLUMNS |
支持 |
截至 5.32 |
SHOW TABLES |
支持 |
截至 5.32 |
SHOW TABLE PROPERTIES |
支持 |
截至 5.32 |
DESCRIBE TABLE |
支持 |
截至 5.32 |
INSERT OVERWRITE |
支持 |
自 5.34 和 6.4 起 |
INSERT INTO | 支持 | 自 5.34 和 6.4 起 |
ALTER TABLE |
支持 |
截至 6.4 |
CREATE TABLE |
支持 |
自 5.35 和 6.7 起 |
CREATE DATABASE |
支持 |
自 5.35 和 6.7 起 |
DROP TABLE |
支持 |
自 5.35 和 6.7 起 |
DROP DATABASE |
支持 |
自 5.35 和 6.7 起 |
DROP VIEW |
支持 |
自 5.35 和 6.7 起 |
CREATE VIEW |
不支持 |
使用 Spark 时支持以下功能SQL:
-
对 Hive Metastore 中的表进行精细访问控制,并且可以在数据库、表和列级别创建策略。
-
Apache Ranger 策略可以包括对用户和组的授予策略和拒绝策略。
-
审核事件提交到 CloudWatch 日志。
重新部署要使用INSERTALTER、或DDL语句的服务定义
注意
从 Amazon EMR 6.4 开始,你可以将 Spark SQL 与语句一起使用:INSERTINTOINSERTOVERWRITE、或ALTERTABLE。从 Amazon EMR 6.7 开始,您可以使用 Spark SQL 创建或删除数据库和表。如果您在部署了 Apache Spark 服务定义的 Apache Ranger 服务器上具有现有安装程序,请使用以下代码重新部署服务定义。
# Get existing Spark service definition id calling Ranger REST API and JSON processor 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 # Download the latest Service definition wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-spark.json # Update the service definition using the 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/<Spark service definition id from step 1>
'
安装服务定义
安装EMR的 Apache Spark 服务定义需要设置 Ranger 管理服务器。请参阅 设置 Ranger 管理服务器。
按照以下步骤安装 Apache Spark 服务定义:
第 1 步:SSH进入 Apache Ranger 管理服务器
例如:
ssh ec2-user@ip-xxx-xxx-xxx-xxx.ec2.internal
步骤 2: 下载服务定义和 Apache Ranger Admin 服务器插件
在临时目录中,下载服务定义。此服务定义由 Ranger 2.x 版本支持。
mkdir /tmp/emr-spark-plugin/ cd /tmp/emr-spark-plugin/ wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-spark-plugin-2.x.jar wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-spark.json
第 3 步:安装适用于亚马逊的 Apache Spark 插件 EMR
export RANGER_HOME=.. # Replace this Ranger Admin's home directory eg /usr/lib/ranger/ranger-2.0.0-admin mkdir $RANGER_HOME/ews/webapp/WEB-INF/classes/ranger-plugins/amazon-emr-spark mv ranger-spark-plugin-2.x.jar $RANGER_HOME/ews/webapp/WEB-INF/classes/ranger-plugins/amazon-emr-spark
第 4 步:为亚马逊注册 Apache Spark 服务定义 EMR
curl -u *<admin users login>*:*_<_**_password_ **_for_** _ranger admin user_**_>_* -X POST -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'
如果此命令成功运行,您将在 Ranger 管理界面中看到一个名为 SPARK “AMAZON-EMR-” 的新服务,如下图所示(显示的是 Ranger 版本 2.0)。
步骤 5:创建 AMAZON-EMR-SPARK 应用程序的实例
Service Name (服务名称)(如果显示):将使用的服务名称。建议的值为 amazonemrspark
。请注意此服务名称,因为创建EMR安全配置时需要使用该名称。
Display Name (显示名称):要为此实例显示的名称。建议的值为 amazonemrspark
。
Common Name For Certificate (凭证的公用名称):凭证中的 CN 字段,用于从客户端插件连接到管理服务器。此值必须与为插件创建的TLS证书中的 CN 字段匹配。
注意
此插件的TLS证书应已在 Ranger 管理服务器的信任库中注册。有关更多信息,请参阅TLS证书。
创建 Spark SQL 策略
创建新策略时,要填写的字段包括:
Policy Name (策略名称):此策略的名称。
Policy Label (策略标注):您可以在此策略上放置的标注。
Database (数据库):应用此策略的数据库。通配符“*”表示所有数据库。
Table(表):应用此策略的表。通配符“*”表示所有表。
EMR火花专栏:本政策适用的列。通配符“*”表示所有列。
Description (描述):策略的描述。
要指定用户和组,请在下方输入用户和组以授予权限。您还可以指定 allow(允许)条件和 deny(拒绝)条件的排除项。
指定允许和拒绝条件后,单击 Save (保存)。
注意事项
EMR集群中的每个节点都必须能够通过端口 9083 连接到主节点。
限制
以下是当前针对 Apache Spark 插件的限制:
-
录制服务器将始终连接到在 Amazon EMR 集群上HMS运行。如果需要,配置HMS为连接到远程模式。您不应该将配置值放在 Apache Spark Hive-site.xml 配置文件中。
-
使用CSV或 Avro 上的 Spark 数据源创建的表无法使用读取。EMR RecordServer使用 Hive 创建和写入数据,并使用 Record 读取。
-
不支持 Delta Lake 和 Hudi 表。
-
用户必须有权访问默认数据库。这是 Apache Spark 的要求。
-
Ranger Admin 服务器不支持自动完成。
-
Amazon 的 Spark SQL 插件EMR不支持行筛选器或数据屏蔽。
-
ALTERTABLE与 Spark 一起使用时SQL,分区位置必须是表位置的子目录。不支持将数据插入分区位置与表位置不同的分区中。