本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用户模拟
在 Jupyter 笔记本中运行的 Spark 作业在亚马逊上执行期间会遍历多个应用程序。EMR例如,Sparkmagic 接收到用户在 Jupyter 中运行的 PySpark 3 个代码,Sparkmagic 使用HTTPPOST请求将其提交给 Livy,然后使用创建一个 Spark 作业在集群上执行。YARN
默认情况下,以这种方式提交的YARN作业都以用户身份运行livy
,无论启动作业的用户是谁。通过设置用户模拟,您可以将 notebook 用户的用户 ID 也设置为与作业关联的YARN用户。每个用户启动的作业分别与 shirley
和 diego
相关联,而不是由与 livy
用户关联的 shirley
和 diego
同时启动作业。这有助于审核 Jupyter 使用情况以及在组织中管理应用程序。
只有在从 Sparkmagic 到 Livy 的调用未进行身份验证时,才支持该配置。不支持在 Hadoop 应用程序和 Livy 之间提供身份验证或代理层的应用程序(如 Apache Knox Gateway)。本节中配置用户模拟的步骤假设 JupyterHub 和 Livy 在同一个主节点上运行。如果您的应用程序有单独的集群,则步骤 3:为用户创建HDFS主目录需要进行修改,以便在 Livy 主节点上创建HDFS目录。
步骤 1:配置 Livy
在创建集群时,您可以使用 livy-conf
和 core-site
配置分类启用 Livy 用户模拟,如以下示例所示。将配置分类另存为,JSON然后在创建集群时引用它,或者以内联方式指定配置分类。有关更多信息,请参阅 配置应用程序。
[ { "Classification": "livy-conf", "Properties": { "livy.impersonation.enabled": "true" } }, { "Classification": "core-site", "Properties": { "hadoop.proxyuser.livy.groups": "*", "hadoop.proxyuser.livy.hosts": "*" } } ]
步骤 2:添加用户
使用PAM或添加 JupyterHub 用户LDAP。有关更多信息,请参阅使用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