暗号化されたシャッフル機能により、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回に制限されます。