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

用户模拟

在 Amazon EMR 上执行期间,在 Jupyter notebook 中运行的 Spark 作业将访问多个应用程序。例如,Sparkmagic 接收用户在 Jupyter 中运行的 PySpark3 代码,Sparkmagic 使用 HTTP POST 请求将其提交到 Livy,然后 Livy 创建一个 Spark 作业以使用 YARN 在集群上执行。

默认情况下,以这种方式提交的 YARN 作业以 livy 用户身份运行,而不管启动该作业的用户如何。通过设置用户模拟,您也可以将笔记本用户的用户 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 或 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