翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ユーザー偽装
Jupyter Notebook 内で実行されている Spark ジョブは、Amazon EMR での実行中に、複数のアプリケーションを走査します。たとえば、Jupyter 内でユーザーが実行する PySpark3 コードが、HTTP POST リクエストを使用してそのコードを Livy に送信する Sparkmagic によって受信されます。それにより、YARN を使用してクラスターで実行する Spark ジョブが作成されます。
デフォルトでは、このように送信された YARN ジョブは、ジョブを開始したユーザーとは関係なく、ユーザー livy
として実行されます。ユーザー偽装を設定することで、ノートブックユーザーのユーザー ID を、YARN ジョブに関連付けられているユーザーとすることができます。各ユーザーによって開始されるジョブは、ユーザー shirley
と関連付けられた diego
と livy
の両方によって開始するのではなく、それぞれ shirley
および diego
に関連付けられます。これにより、Jupyter の使用を監査し、組織内でアプリケーションを管理できます。
この設定がサポートされるのは、Sparkmagic から Livy への呼び出しが認証されていない場合のみです。Hadoop アプリケーションと Livy (Apache Knox Gateway など) 間で認証またはプロキシレイヤーを提供するアプリケーションはサポートされません。このセクションでユーザー偽装を設定するステップでは、JupyterHub と Livy が同じマスターノードで実行されていることを前提としています。アプリケーションに別々のクラスターがある場合、ステップ 3: ユーザーの HDFS ホームディレクトリを作成する を変更し、HDFS ディレクトリが Livy マスターノードで作成されるようにする必要があります。
ステップ 1: Livy を設定する
次の例に示すように、クラスターを作成して Livy のユーザー偽装を有効にする場合は、livy-conf
および core-site
設定分類を使用します。設定分類を JSON として保存し、クラスターの作成時にその分類を参照するか、インラインで指定します。詳細については、「アプリケーションの設定」を参照してください。
[
{
"Classification": "livy-conf",
"Properties": {
"livy.impersonation.enabled": "true"
}
},
{
"Classification": "core-site",
"Properties": {
"hadoop.proxyuser.livy.groups": "*",
"hadoop.proxyuser.livy.hosts": "*"
}
}
]
ステップ 2: ユーザーを追加する
PAM または LDAP を使用して JupyterHub ユーザーを追加します。詳細については、PAM 認証の使用およびLDAP 認証の使用を参照してください。
ステップ 3: ユーザーの HDFS ホームディレクトリを作成する
ユーザーを作成するため、マスターノードに接続しました。マスターノードに接続中に、次のコンテンツをコピーして、スクリプトファイルに保存します。スクリプトにより、マスターノードの各 JupyterHub ユーザーごとに、HDFS ホームディレクトリが作成されます。このスクリプトでは、デフォルトの管理者ユーザー ID jovyan
を使用することが前提となっています。
#!/bin/bash
CURL="curl --silent -k"
HOST=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname)
admin_token() {
local user=jovyan
local pwd=jupyter
local token=$($CURL https://$HOST:9443/hub/api/authorizations/token \
-d "{\"username\":\"$user\", \"password\":\"$pwd\"}" | jq ".token")
if [[ $token != null ]]; then
token=$(echo $token | sed 's/"//g')
else
echo "Unable to get Jupyter API Token."
exit 1
fi
echo $token
}
# Get Jupyter Admin token
token=$(admin_token)
# Get list of Jupyter users
users=$(curl -XGET -s -k https://$HOST:9443/hub/api/users \
-H "Authorization: token $token" | jq '.[].name' | sed 's/"//g')
# Create HDFS home dir
for user in ${users[@]};
do
echo "Create hdfs home dir for $user"
hadoop fs -mkdir /user/$user
hadoop fs -chmod 777 /user/$user
done