Apache Spark 插件 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Apache Spark 插件

Amazon EMR 集成了 EMR RecordServer 以能够为 SparkSQL 提供精细访问控制,以及 EMRFS S3 Ranger 插件以提供粗粒度访问控制。EMR 的 RecordServer 是一个特权进程,运行在启用了 Apache Ranger 的集群的所有节点上。当 Spark 驱动程序或执行程序运行 SparkSQL 语句时,所有元数据和数据请求都通过 RecordServer。

支持的功能

SQL 语句/Ranger 动作 STATUS 支持的 EMR 版本

SELECT

支持

截至 5.32

SHOW DATABASES

支持

截至 5.32

SHOW TABLES

支持

截至 5.32

SHOW COLUMNS

支持

截至 5.32

SHOW TABLE PROPERTIES

支持

截至 5.32

DESCRIBE TABLE

支持

截至 5.32

CREATE TABLE

不支持

UPDATE TABLE

不支持

INSERT OVERWRITE

支持

截至 6.4

INSERT INTO 支持 截至 6.4

ALTER TABLE

支持

截至 6.4

DELETE FROM

不支持

使用 SparkSQL 时支持以下功能:

  • 对 Hive Metastore 中的表进行精细访问控制,并且可以在数据库、表和列级别创建策略。

  • Apache Ranger 策略可以包括对用户和组的授予策略和拒绝策略。

  • 审核事件将提交到 CloudWatch Logs。

重新部署服务定义以使用 INSERT INTO (插入)、INSERT OVERWRITE (插入覆盖)或更改 LTER TABLE (表格语句)

注意

从 Amazon EMR 6.4 开始,您可以将 Spark SQL 与以下语句结合使用: INSERT INTO (插入)、INSERT OVERWRITE (插入覆盖)或更改 LTER TABLE (表格语句)。如果您在部署了 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 Admin 服务器。请参阅 设置 Ranger 管理服务器

按照以下步骤安装 Apache Spark 服务定义:

步骤 1:SSH 进入 Apache Ranger Admin 服务器

例如:

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:安装适用于 Amazon EMR 的 Apache Spark 插件

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:注册 Amazon EMR 的 Apache Spark 服务定义

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 Admin UI 中看到一个名为“AMAZON-EMR-SPARK”的新服务,如下图所示(显示 Ranger 2.0 版)。


						在 Ranger Admin 中注册的“AMAZON-EMR-SPARK”。

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

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

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

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


						Ranger Admin 创建服务。
注意

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

创建 SparkSQL 策略

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

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

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

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

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

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

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


						Ranger Admin 创建 SparkSQL 策略详细信息。

要指定用户和组,请在下方输入用户和组以授予权限。EMR SparkSQL 目前仅支持 select (选择) 操作。您还可以指定 allow (允许) 条件和 deny (拒绝) 条件的排除项,如下所示。


						Ranger Admin SparkSQL 策略详细信息允许条件.

指定允许和拒绝条件后,单击 Save (保存)

其他注意事项

EMR 集群中的每个节点都必须能够通过端口 9083 连接到主节点 (master node)。

Limitations

以下是目前的限制:

  • Record 服务器将始终连接到 Amazon EMR 集群上运行的 HMS。如果需要,将 HMS 配置为连接到远程模式。您不应该将配置值放在 Apache Spark Hive-site.xml 配置文件中。

  • 使用 EMR RecordServer 无法读取 CSV 或 Avro 上使用 Spark 数据源创建的表。使用 Hive 创建和写入数据,并使用 Record 读取。

  • 不支持 Delta Lake 和 Hudi 表。

  • 用户必须有权访问默认数据库。这是 Apache Spark 的要求。

  • Ranger Admin 服务器不支持自动完成。

  • Amazon EMR 的 SparkSQL 插件不支持行筛选器或数据掩码。

  • 将 ALTER TABLE 与 Spark SQL 结合使用时,分区位置必须是表位置的子目录。不支持将数据插入分区位置与表位置不同的分区中。