本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用者模擬
在 Jupyter 筆記本內執行的 Spark 作業,會在其於 Amazon EMR 上執行期間周遊多個應用程式。例如,使用者在 Jupyter 內執行的 PySpark3 程式碼,將由 Sparkmagic 接收,此應用程式會使用 HTTP POST 要求將該程式碼提交到 Livy,再由其建立可在使用 YARN 的叢集上執行的 Spark 工作。
根據預設,以這種方式提交的 YARN 工作將會以使用者 livy
的身分執行,無論該工作當初是由哪位使用者啟動。設定使用者模擬之後,筆記本使用者的使用者 ID 也會成為與該 YARN 工作關聯的使用者。因此不需要讓 shirley
和 diego
起始的工作都與使用者 livy
建立關聯,因為由每位使用者所起始的工作,都已分別與 shirley
和 diego
互有關聯。這樣能幫助您稽核 Jupyter 用量,以及管理組織內的應用程式。
只有當從 Sparkmagic 發出的 Livy 呼叫是未經授權時,此組態才會受到支援。不支援為 Hadoop 應用程式和 Livy 之間提供身分驗證或代理層 (例如 Apache Knox Gateway) 的應用程式。本節中所述用於設定使用者模擬的步驟,則假設 JupyterHub 和 Livy 執行於相同主節點上。如果您的應用程式具有不同的叢集,則您必須修改 步驟 3:建立 HDFS 使用者主目錄,以便在 Livy 主節點上建立該 HDFS 目錄。
用於設定使用者模擬的步驟
步驟 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