

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR と Apache Ranger の統合用 Apache Spark プラグイン
<a name="emr-ranger-spark"></a>

Amazon EMR には EMR RecordServer が統合されており、SparkSQL のきめ細かなアクセスコントロールを実現しています。EMR の RecordServer は、Apache Ranger 対応クラスター上のすべてのノードで実行される特権プロセスです。Spark ドライバーまたはエグゼキューターが SparkSQL ステートメントを実行すると、すべてのメタデータおよびデータリクエストが RecordServer を経由します。EMR RecordServer の詳細については、「[Apache Ranger で使用する Amazon EMR コンポーネント](emr-ranger-components.md)」ページを参照してください。

**Topics**
+ [サポートされている機能](#emr-ranger-spark-supported-features)
+ [INSERT、ALTER、または DDL ステートメントを使用するように、サービス定義を再デプロイする](#emr-ranger-spark-redeploy-service-definition)
+ [サービス定義のインストール](#emr-ranger-spark-install-servicedef)
+ [SparkSQL ポリシーの作成](#emr-ranger-spark-create-sparksql)
+ [考慮事項](#emr-ranger-spark-considerations)
+ [制限事項](#emr-ranger-spark-limitations)

## サポートされている機能
<a name="emr-ranger-spark-supported-features"></a>


| SQL ステートメント/Ranger アクション | 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  |  サポート外  |    | 

SparkSQL を使用する場合、次の機能がサポートされています。
+ Hive Metastore 内のテーブルに対するきめ細かいアクセスコントロール、およびポリシーを、データベース、テーブル、および列レベルで作成できます。
+ Apache Ranger ポリシーには、ユーザーおよびグループへの付与ポリシーと拒否ポリシーを含めることができます。
+ 監査イベントは CloudWatch Logs に送信されます。

## INSERT、ALTER、または DDL ステートメントを使用するように、サービス定義を再デプロイする
<a name="emr-ranger-spark-redeploy-service-definition"></a>

**注記**  
Amazon EMR 6.4 以降、INSERT INTO、INSERT OVERWRITE、ALTER TABLE の各ステートメントを使用して Spark SQL を使用できます。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>'
```

## サービス定義のインストール
<a name="emr-ranger-spark-install-servicedef"></a>

EMR の Apache Spark サービス定義をインストールするには、レンジャー管理サーバーを設定する必要があります。「[Amazon EMR と統合するように Ranger 管理サーバーを設定する](emr-ranger-admin.md)」を参照してください。

Apache Spark サービス定義をインストールするには、次の手順に従います。

**ステップ 1: Apache Ranger 管理サーバーに SSH で接続する**

例: 

```
ssh ec2-user@ip-xxx-xxx-xxx-xxx.ec2.internal
```

**ステップ 2: サービス定義および Apache Ranger 管理サーバープラグインをダウンロードする**

一時ディレクトリに、サービス定義をダウンロードします。このサービス定義は 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 管理 UI に「AMAZON-EMR-SPARK」という新しいサービスが表示されます (Ranger バージョン 2.0 が示されています)。

![\[Ranger 管理に「AMAZON-EMR-SPARK」が登録されています。\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/images/ranger-amazon-emr-spark.png)


**ステップ 5: AMAZON-EMR-SPARK アプリケーションのインスタンスを作成する**

**[Service Name]** (サービス名): 使用されるサービス名 (表示されている場合)。推奨値は **amazonemrspark** です。このサービス名をメモしておいてください。EMR セキュリティ設定を作成するときに必要になります。

**[Display Name]** (表示名): このインスタンスに表示される名前。推奨値は **amazonemrspark** です。

**[Common Name For Certificate]** (証明書の共通名): クライアントプラグインから管理サーバーに接続するために使用する証明書内の CN フィールド。この値は、プラグイン用に作成された TLS 証明書の CN フィールドと一致する必要があります。

![\[Ranger 管理のサービス作成。\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/images/ranger-create-service.png)


**注記**  
このプラグインの TLS 証明書は、Ranger 管理サーバーのトラストストアに登録されている必要があります。詳細については、「[Apache Ranger と Amazon EMR の統合のための TLS 証明書](emr-ranger-admin-tls.md)」を参照してください。

## SparkSQL ポリシーの作成
<a name="emr-ranger-spark-create-sparksql"></a>

新しいポリシーを作成する場合、入力するフィールドは次のとおりです。

**[Policy Name]** (ポリシー名): このポリシーの名前。

**[Policy Label]** (ポリシーラベル): このポリシーにつけることができるラベル。

**[Database]** (データベース): このポリシーが適用されるデータベース。ワイルドカード「\$1」はすべてのデータベースを表します。

**[Table]** (テーブル): このポリシーが適用されるテーブル。ワイルドカード「\$1」はすべてのテーブルを表します。

**[EMR Spark Column]** (EMR Spark 列): このポリシーが適用される列。ワイルドカード「\$1」はすべての列を表します。

**[Description]** (説明): このポリシーの説明。

![\[Ranger 管理の SparkSQL ポリシーの作成の詳細。\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/images/ranger-create-policy-details.png)


ユーザーとグループを指定するには、以下のユーザーおよびグループを入力してアクセス許可を付与します。**[許可]** 条件および **[拒否]** 条件の除外を指定することもできます。

![\[Ranger 管理の SparkSQL ポリシーの詳細の許可条件。\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/images/ranger-create-policy-allow-conditions.png)


許可条件と拒否条件を指定したら、**[Save]** (保存) をクリックします。

## 考慮事項
<a name="emr-ranger-spark-considerations"></a>

EMR クラスター内の各ノードは、ポート 9083 でメインノードに接続できる必要があります。

## 制限事項
<a name="emr-ranger-spark-limitations"></a>

Apache Spark プラグインの現在の制限事項は次のとおりです。
+ レコードサーバーは常に Amazon EMR クラスターで実行されている HMS に接続します。必要に応じて、リモートモードに接続するように HMS を設定します。Apache Spark Hive-site.xml 設定ファイル内に設定値を入れないでください。
+ CSV または Avro で Spark データソースを使用して作成されたテーブルは、EMR RecordServer を使用して読み取ることができません。Hive を使用してデータの作成および書き込みを行い、Record を使用して読み取りを行います。
+ Delta Lake、Hudi および Iceberg テーブルはサポートされていません。
+ ユーザーは、デフォルトのデータベースにアクセスできる必要があります。これは Apache Spark の要件です。
+ Ranger 管理サーバーはオートコンプリートをサポートしていません。
+ Amazon EMR 用 SparkSQL プラグインは、行フィルターやデータマスキングをサポートしていません。
+ Spark SQL で ALTER TABLE を使用する場合、パーティションの場所はテーブルの場所の子ディレクトリである必要があります。パーティションの場所がテーブルの場所と異なるパーティションへのデータの挿入はサポートされていません。