Apache Spark 外掛程式 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Apache Spark 外掛程式

Amazon EMR 已經整合 EMR RecordServer ,為 Spark SQL 提供精細的訪問控制。EMR的 RecordServer 是在啟用 Apache Range 的叢集上的所有節點上執行的特權程序。當 Spark 驅動程式或執行程式執行 Spark SQL 陳述式時,所有中繼資料和資料要求都會經過 RecordServer. 若要進一步了解 EMR RecordServer,請參閱Amazon 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 中繼存放區內的資料表和政策的精細分級的存取控制。

  • Apache Ranger 政策可以包括對使用者和群組的授權政策和拒絕政策。

  • 稽核事件會提交至 CloudWatch 記錄檔。

重新部署要使用INSERT、ALTER或DDL陳述式的服務定義

注意

從 Amazon EMR 6.4 開始,您可以使用星火SQL與語句:INSERTINTOINSERTOVERWRITE,或ALTERTABLE。從 Amazon EMR 6.7 開始,您可以使用 Spark SQL 來創建或刪除數據庫和表。如果您在 Apache Ranger 伺服器上已有安裝並部署了 Apache Spark 服務定義,請使用下列程式碼重新部署服務定義。

# 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>'

安裝服務定義

的 Apache 星火服務定義EMR的安裝需要遊俠管理服務器進行設置。請參閱 設定 Ranger Admin 伺服器

請遵循下列步驟安裝 Apache Spark 服務定義:

第 1 步:SSH進入 Apache 遊俠管理服務器

例如:

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

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 的 Apache 星火服務定義 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'

如果此命令運行成功,您會在遊俠管理 UI 中看到一個名為 SPARK「AMAZONEMR--」的新服務,如下圖所示(Ranger 2.0 版本顯示)。

「AMAZON-EMR-SPARK」在遊俠管理員註冊。

步驟 5:建立 AMAZON-EMR SPARK 應用程式的執行個體

服務名稱 (如果顯示):將使用的服務名稱。建議的值為 amazonemrspark。請注意建立EMR安全性組態時所需的服務名稱。

顯示名稱:要為此執行個體顯示的名稱。建議的值為 amazonemrspark

憑證的通用名稱:憑證內的 CN 欄位用於從用戶端外掛程式連接至管理伺服器。此值必須與TLS憑證中為外掛程式建立的 CN 欄位相符。

Ranger Admin 會建立服務。
注意

此外掛程式的TLS憑證應該已在 Ranger Admin 伺服器上的信任存放區中註冊。如需詳細資訊,請參閱TLS證書

建立星火SQL政策

建立新政策時,要填入的欄位如下:

政策名稱:此政策的名稱。

政策標籤:您可以放在此政策上的標籤。

資料庫:此政策套用的資料庫。萬用字元 "*" 代表所有資料庫。

資料表:此政策套用的資料表。萬用字元 "*" 代表所有資料表。

EMR星火資料欄:此原則適用的資料欄。萬用字元 "*" 代表所有資料欄。

描述:此政策的描述。

遊俠管理員創建星火SQL政策的細節。

若要指定使用者和群組,請在下方輸入使用者和群組以授予許可。您也可以為允許條件和拒絕條件指定排除。

遊俠管理員星火SQL政策細節允許條件。

在指定允許和拒絕條件之後,按一下儲存

考量事項

EMR叢集中的每個節點都必須能夠連線到連接埠 9083 上的主節點。

限制

以下是 Apache Spark 外掛程式的目前限制:

  • 記錄服務器將始終連接到在 Amazon EMR 集群上HMS運行。視需HMS要設定為連線至遠端模式。您不應將設定值放在 Apache Spark Hive-site.xml 組態檔案內。

  • 使用上CSV或 Avro 的星火數據源創建的表不可讀使用. EMR RecordServer 使用 Hive 建立和寫入資料,並使用 Record 讀取。

  • 不支援 Delta Lake 和 Hudi 資料表。

  • 使用者必須具有預設資料庫的存取權。這是 Apache Spark 的需求。

  • Ranger Admin 伺服器不支援自動完成。

  • Amazon 的 Spark SQL 插件EMR不支持行過濾器或數據屏蔽。

  • ALTERTABLE與 Spark 搭配使用時SQL,分割區位置必須是資料表位置的子目錄。不支援將資料插入到分割區位置與資料表位置不同的分割區。