本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 版本顯示)。
步驟 5:建立 AMAZON-EMR SPARK 應用程式的執行個體
服務名稱 (如果顯示):將使用的服務名稱。建議的值為 amazonemrspark
。請注意建立EMR安全性組態時所需的服務名稱。
顯示名稱:要為此執行個體顯示的名稱。建議的值為 amazonemrspark
。
憑證的通用名稱:憑證內的 CN 欄位用於從用戶端外掛程式連接至管理伺服器。此值必須與TLS憑證中為外掛程式建立的 CN 欄位相符。
注意
此外掛程式的TLS憑證應該已在 Ranger Admin 伺服器上的信任存放區中註冊。如需詳細資訊,請參閱TLS證書。
建立星火SQL政策
建立新政策時,要填入的欄位如下:
政策名稱:此政策的名稱。
政策標籤:您可以放在此政策上的標籤。
資料庫:此政策套用的資料庫。萬用字元 "*" 代表所有資料庫。
資料表:此政策套用的資料表。萬用字元 "*" 代表所有資料表。
EMR星火資料欄:此原則適用的資料欄。萬用字元 "*" 代表所有資料欄。
描述:此政策的描述。
若要指定使用者和群組,請在下方輸入使用者和群組以授予許可。您也可以為允許條件和拒絕條件指定排除。
在指定允許和拒絕條件之後,按一下儲存。
考量事項
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,分割區位置必須是資料表位置的子目錄。不支援將資料插入到分割區位置與資料表位置不同的分割區。