用户模拟 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

用户模拟

在 Jupyter 笔记本中运行的 Spark 作业在亚马逊上执行期间会遍历多个应用程序。EMR例如,Sparkmagic 接收到用户在 Jupyter 中运行的 PySpark 3 个代码,Sparkmagic 使用HTTPPOST请求将其提交给 Livy,然后使用创建一个 Spark 作业在集群上执行。YARN

默认情况下,以这种方式提交的YARN作业都以用户身份运行livy,无论启动作业的用户是谁。通过设置用户模拟,您可以将 notebook 用户的用户 ID 也设置为与作业关联的YARN用户。每个用户启动的作业分别与 shirleydiego 相关联,而不是由与 livy 用户关联的 shirleydiego 同时启动作业。这有助于审核 Jupyter 使用情况以及在组织中管理应用程序。

只有在从 Sparkmagic 到 Livy 的调用未进行身份验证时,才支持该配置。不支持在 Hadoop 应用程序和 Livy 之间提供身份验证或代理层的应用程序(如 Apache Knox Gateway)。本节中配置用户模拟的步骤假设 JupyterHub 和 Livy 在同一个主节点上运行。如果您的应用程序有单独的集群,则步骤 3:为用户创建HDFS主目录需要进行修改,以便在 Livy 主节点上创建HDFS目录。

步骤 1:配置 Livy

在创建集群时,您可以使用 livy-confcore-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