注意事项和问题 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

注意事项和问题

在 EMR 上配置 Kerberos

为 Kerberos 配置 EMR 集群时,需要配置 Kerberos 以便用户能够进行身份验证,这是 Apache Ranger 与 Amazon EMR 集成的要求。有关配置 Kerberos 的更多信息,请参阅在 Amazon EMR 上配置 Kerberos。有关如何创建用户和 Kerberos 委托人的信息,请参阅为通过 Kerberos 进行身份验证的 HDFS 用户和 SSH 连接配置集群

配置 Hue

有关配置 Hue 以使用 LDAP 作为身份验证机制的说明,请参阅《Amazon EMR 发布指南》中的为 LDAP 用户配置 Hue

已知问题

Amazon EMR 发行版 5.32 中存在一个已知问题,其中更改了 hive-site.xml 的权限,以便只有特权用户才能读取它,因为其中可能存储了凭证。这可能会阻止 Hue 读取 hive-site.xml 并导致网页不断重新加载。如果遇到此问题,请添加以下配置来修复此问题:

[ { "Classification": "hue-ini", "Properties": {}, "Configurations": [ { "Classification": "desktop", "Properties": { "server_group":"hive_site_reader" }, "Configurations":[ ] } ] } ]

配置 Zeppelelin

使用 Apache Zeppelin 作为用于交互式数据探索的笔记本。有关 Zeppelin 的更多信息,请参阅 Apache Zeppelin。Zeppelin 包含在 Amazon EMR 发行版 5.0.0 及更高版本中。早期版本包括 Zeppelin 作为沙盒应用程序。有关更多信息,请参阅《Amazon EMR 发布指南》中的 Amazon EMR 4.x 发行版

默认情况下,Zeppelin 配置了默认登录名和密码,这在多租户环境中并不安全。

要为 Apache Spark 用例配置 Zeppelin,请完成以下步骤。

步骤 1:修改身份验证机制

修改 shiro.ini 文件以实现您首选的身份验证机制。Zeppelin 支持 Active Directory、LDAP、PAM 和 Knox SSO。有关详细信息,请参阅 Apache Zeppelin 的 Apache Shiro 身份验证

步骤 2:配置 Zeppelin 以模拟终端用户

允许 Zeppelin 能够模拟终端用户允许 Zeppelin 提交的任务作为终端用户运行。将以下配置添加到 core-site.xml

[ { "Classification": "core-site", "Properties": { "hadoop.proxyuser.zeppelin.hosts": "*", "hadoop.proxyuser.zeppelin.groups": "*" }, "Configurations": [ ] } ]

接下来,将以下配置添加到 hadoop-kms-site.xml 中,也可以在 /etc/hadoop/conf 中找到:

[ { "Classification": "hadoop-kms-site", "Properties": { "hadoop.kms.proxyuser.zeppelin.hosts": "*", "hadoop.kms.proxyuser.zeppelin.groups": "*" }, "Configurations": [ ] } ]

您还可以按照在控制台中重新配置实例组中的步骤,使用控制台将这些配置添加到您的 Amazon EMR 集群。

步骤 2a. 允许 Zeppelin 作为终端用户执行指令

创建一个名为 /etc/sudoers.d/90-zeppelin-user 的文件,其中包含以下内容:

zeppelin ALL=(ALL) NOPASSWD:ALL

步骤 2b. 修改解释器设置以在它们自己的进程中运行用户任务

配置所有解释器以在“隔离”进程中实例化“Per User”解释器,如下所示。


					Amazon EMR 和 Apache Ranger 架构图。

步骤 2c. 修改 zeppelin-env.sh

将以下内容添加到 zeppelin-env.sh 以便 Zeppelin 以终端用户身份启动解释器:

ZEPPELIN_IMPERSONATE_USER=`echo ${ZEPPELIN_IMPERSONATE_USER} | cut -d @ -f1` export ZEPPELIN_IMPERSONATE_CMD='sudo -H -u ${ZEPPELIN_IMPERSONATE_USER} bash -c'

将以下内容添加到 zeppelin-env.sh 以将默认的笔记本权限改为仅对创建者只读:

export ZEPPELIN_NOTEBOOK_PUBLIC="false"

最后,将以下内容添加到 zeppelin-env.sh 以在第一个 CLASSPATH 语句之后包含 EMR RecordServer 类路径:

export CLASSPATH="$CLASSPATH:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-connector-common.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-spark-connector.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-client.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-common.jar:/usr/share/aws/emr/record-server/lib/jars/secret-agent-interface.jar"

第 3 步 重新启动 Zeppelin。

运行以下命令以重新启动 Zeppelin:

sudo systemctl restart zeppelin

应用程序 UI(用户界面

默认情况下,应用程序 UI 不执行身份验证。这包括 ResourceManager UI、NodeManager UI、Livy UI 等。此外,任何有权访问 UI 的用户都能够查看有关所有其他用户的任务相关信息。

如果不需要这种行为,您应该确保使用安全组来限制用户对应用程序 UI 的访问。

HDFS 默认权限

默认情况下,用户在 HDFS 中创建的对象被授予全局可读权限。这可能会导致无权访问数据的用户也可以读取数据。要更改此行为,以便将默认文件权限设置为仅由任务创建者读取和写入,请执行以下步骤。

创建 EMR 集群时,请提供以下配置:

[ { "Classification": "hdfs-site", "Properties": { "dfs.namenode.acls.enabled": "true", "fs.permissions.umask-mode": "077", "dfs.permissions.superusergroup": "hdfsadmingroup" } } ]

此外,运行以下引导操作:

--bootstrap-actions Name='HDFS UMask Setup',Path=s3://elasticmapreduce/hdfs/umask/umask-main.sh