Apache Spark 插件 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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)。

“AMAZON-EMR-SPARK” 已在 Ranger 管理员中注册。

步骤 5:创建 AMAZON-EMR-SPARK 应用程序的实例

Service Name (服务名称)(如果显示):将使用的服务名称。建议的值为 amazonemrspark。请注意此服务名称,因为创建EMR安全配置时需要使用该名称。

Display Name (显示名称):要为此实例显示的名称。建议的值为 amazonemrspark

Common Name For Certificate (凭证的公用名称):凭证中的 CN 字段,用于从客户端插件连接到管理服务器。此值必须与为插件创建的TLS证书中的 CN 字段匹配。

Ranger Admin 创建服务。
注意

此插件的TLS证书应已在 Ranger 管理服务器的信任库中注册。有关更多信息,请参阅TLS证书

创建 Spark SQL 策略

创建新策略时,要填写的字段包括:

Policy Name (策略名称):此策略的名称。

Policy Label (策略标注):您可以在此策略上放置的标注。

Database (数据库):应用此策略的数据库。通配符“*”表示所有数据库。

Table(表):应用此策略的表。通配符“*”表示所有表。

EMR火花专栏:本政策适用的列。通配符“*”表示所有列。

Description (描述):策略的描述。

Ranger 管理员创建 Spark SQL 策略详情。

要指定用户和组,请在下方输入用户和组以授予权限。您还可以指定 allow(允许)条件和 deny(拒绝)条件的排除项。

Ranger Admin Spark SQL 政策详细信息允许条件。

指定允许和拒绝条件后,单击 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,分区位置必须是表位置的子目录。不支持将数据插入分区位置与表位置不同的分区中。