暗号化されたシャッフル機能により、HTTPSを使用し、オプションでクライアント認証(双方向HTTPS、またはクライアント証明書付きHTTPSとも呼ばれます)を使用して、MapReduceシャッフルを暗号化できます。これは以下で構成されます。
HTTPとHTTPSの間でシャッフルを切り替えるためのHadoop構成設定。
シャッフルサービスとシャッフルデータを取得するreducerタスクによって使用されるキーストアとトラストストアのプロパティ(場所、タイプ、パスワード)を指定するためのHadoop構成設定。
クラスタ全体でトラストストアを再読み込みする方法(ノードが追加または削除された場合)。
暗号化されたシャッフルを有効にするには、クラスタ内のすべてのノードのcore-site.xmlで次のプロパティを設定します。
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
hadoop.ssl.require.client.cert |
false |
クライアント証明書が必要かどうか |
hadoop.ssl.hostname.verifier |
DEFAULT |
HttpsURLConnectionsに提供するホスト名検証ツール。有効な値は、DEFAULT、STRICT、STRICT_IE6、DEFAULT_AND_LOCALHOST、およびALLOW_ALLです。 |
hadoop.ssl.keystores.factory.class |
org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory |
使用するKeyStoresFactory実装 |
hadoop.ssl.server.conf |
ssl-server.xml |
SSLサーバーキーストア情報が抽出されるリソースファイル。このファイルはクラスパスで検索され、通常はHadoop conf/ディレクトリにあります。 |
hadoop.ssl.client.conf |
ssl-client.xml |
SSLサーバーキーストア情報が抽出されるリソースファイル。このファイルはクラスパスで検索され、通常はHadoop conf/ディレクトリにあります。 |
リソースファイル。sslクライアントのキーストアとトラストストアの情報が抽出されます。このファイルはクラスパスで検索され、通常はHadoop conf/ディレクトリに配置する必要があります |
TLSv1.2 |
サポートされているSSLプロトコル。このパラメータはDatanodeHttpServerからのみ使用されます。 |
重要:現在、クライアント証明書の要求はfalseに設定する必要があります。詳細は、クライアント証明書セクションを参照してください。
重要: これらのプロパティはすべて、クラスタ構成ファイルでfinalとしてマークする必要があります。
<property>
<name>hadoop.ssl.require.client.cert</name>
<value>false</value>
<final>true</final>
</property>
<property>
<name>hadoop.ssl.hostname.verifier</name>
<value>DEFAULT</value>
<final>true</final>
</property>
<property>
<name>hadoop.ssl.keystores.factory.class</name>
<value>org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory</value>
<final>true</final>
</property>
<property>
<name>hadoop.ssl.server.conf</name>
<value>ssl-server.xml</value>
<final>true</final>
</property>
<property>
<name>hadoop.ssl.client.conf</name>
<value>ssl-client.xml</value>
<final>true</final>
</property>
mapred-site.xml のプロパティ暗号化されたシャッフルを有効にするには、クラスタ内のすべてのノードのmapred-site.xmlで次のプロパティを設定します。
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
mapreduce.shuffle.ssl.enabled |
false |
true |
暗号化されたシャッフルが有効になっているかどうか
<property>
<name>mapreduce.shuffle.ssl.enabled</name>
<value>true</value>
<final>true</final>
</property>
重要: このプロパティは、クラスタ構成ファイルでfinalとしてマークする必要があります。
ジョブタスクがサーバーのキーストア情報を読み取ってシャッフルサーバー証明書にアクセスできないように、Linuxコンテナエグゼキュータを設定する必要があります。
現在、FileBasedKeyStoresFactoryは唯一のKeyStoresFactory実装です。FileBasedKeyStoresFactory実装は、ssl-server.xmlファイルとssl-client.xmlファイルの次のプロパティを使用して、キーストアとトラストストアを構成します。
ssl-server.xml (シャッフルサーバー) の構成mapredユーザーはssl-server.xmlファイルを所有し、排他的な読み取りアクセス権を持っている必要があります。
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
ssl.server.keystore.type |
jks |
キーストアファイルのタイプ |
ssl.server.keystore.location |
NONE | キーストアファイルの場所。mapredユーザーはこのファイルを所有し、排他的な読み取りアクセス権を持っている必要があります。 |
ssl.server.keystore.password |
NONE | キーストアファイルのパスワード |
ssl.server.truststore.type |
jks |
jks |
トラストストアファイルのタイプ |
NONE | ssl.server.truststore.location |
トラストストアファイルの場所。 mapredユーザーはこのファイルを所有し、排他的な読み取りアクセス権を持っている必要があります。 |
NONE | ssl.server.truststore.password |
トラストストアファイルのパスワード |
10000 | ssl.server.truststore.reload.interval |
<configuration>
<!-- Server Certificate Store -->
<property>
<name>ssl.server.keystore.type</name>
<value>jks</value>
</property>
<property>
<name>ssl.server.keystore.location</name>
<value>${user.home}/keystores/server-keystore.jks</value>
</property>
<property>
<name>ssl.server.keystore.password</name>
<value>serverfoo</value>
</property>
<!-- Server Trust Store -->
<property>
<name>ssl.server.truststore.type</name>
<value>jks</value>
</property>
<property>
<name>ssl.server.truststore.location</name>
<value>${user.home}/keystores/truststore.jks</value>
</property>
<property>
<name>ssl.server.truststore.password</name>
<value>clientserverbar</value>
</property>
<property>
<name>ssl.server.truststore.reload.interval</name>
<value>10000</value>
</property>
</configuration>
トラストストアの再読み込み間隔(ミリ秒)
<configuration>
<!-- Client certificate Store -->
<property>
<name>ssl.client.keystore.type</name>
<value>jks</value>
</property>
<property>
<name>ssl.client.keystore.location</name>
<value>${user.home}/keystores/client-keystore.jks</value>
</property>
<property>
<name>ssl.client.keystore.password</name>
<value>clientfoo</value>
</property>
<!-- Client Trust Store -->
<property>
<name>ssl.client.truststore.type</name>
<value>jks</value>
</property>
<property>
<name>ssl.client.truststore.location</name>
<value>${user.home}/keystores/truststore.jks</value>
</property>
<property>
<name>ssl.client.truststore.password</name>
<value>clientserverbar</value>
</property>
<property>
<name>ssl.client.truststore.reload.interval</name>
<value>10000</value>
</property>
</configuration>
jks
トラストストアファイルのタイプ
トラストストアファイルの場所。mapredユーザーはこのファイルを所有し、デフォルトのパーミッションを持っている必要があります。
トラストストアファイルのパスワード
10000
トラストストアの再読み込み間隔(ミリ秒)
<property>
<name>mapred.reduce.child.java.opts</name>
<value>-Xmx-200m -Djavax.net.debug=all</value>
</property>
上記の構成変更を行ったら、すべてのNodeManagerを再起動して、暗号化されたシャッフルをアクティブにします。
YARN_NODEMANAGER_OPTS="-Djavax.net.debug=all"
この機能により、マージフェーズとシャッフルフェーズで生成される中間ファイルの暗号化が可能になります。ジョブプロパティ mapreduce.job.encrypted-intermediate-data を true に設定することで有効化できます。
| 名称 | 種類 | 説明 |
|---|---|---|
| mapreduce.job.encrypted-intermediate-data | ブール値 | MapReduceの中間スピルファイルの暗号化を有効または無効にします。デフォルトはfalseです。 |
| mapreduce.job.encrypted-intermediate-data-key-size-bits | 整数 | ディスクにスピルされたデータを暗号化するためにキー生成器で使用されるキーの長さ。 |
| mapreduce.job.encrypted-intermediate-data.buffer.kb | 整数 | 暗号化後にディスクに書き込まれるストリームのバッファサイズ(KB単位)。 |
注記: 現在、暗号化された中間データスピルを有効にすると、ジョブの試行回数が1回に制限されます。