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

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

用户模拟

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

默认情况下,以这种方式提交的 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