从笔记本连接到 Amazon EMR 集群
如果您从 Studio 的 Jupyter 笔记本连接到 Amazon EMR 集群,则可能需要执行其他设置。具体而言,以下讨论涉及两个问题:
-
将参数传递到 Amazon EMR 连接命令。在 SparkMagic 内核中,由于 Papermill 传递参数的方式和 SparkMagic 接收参数的方式不同,传递给 Amazon EMR 连接命令的参数可能无法按预期工作。解决这一限制的办法是将参数作为环境变量传递。有关此问题和解决方法的更多详细信息,请参阅将参数传递给 EMR 连接命令。
-
将用户凭证传递给经过 Kerberos、LDAP 或 HTTP Basic Auth 身份验证的 Amazon EMR 集群。在交互模式下,Studio 会在弹出表单中要求您提供凭证,您可以在其中输入登录凭证。在非交互式计划的笔记本中,您必须通过 Amazon Secrets Manager 传递它们。有关如何在计划的笔记本作业中使用 Amazon Secrets Manager 的更多详细信息,请参阅将用户凭证传递给经过 Kerberos、LDAP 或 HTTP Basic Auth 身份验证的 Amazon EMR 集群。
将参数传递给 EMR 连接命令
如果您使用的是带有 SparkMagic PySpark 和 Spark 内核的映像,并且想要对 EMR 连接命令进行参数化,请在“创建作业”表单(其他选项下拉菜单中)的环境变量字段而不是“参数”字段中提供参数。确保 Jupyter 笔记本中的 EMR 连接命令将这些参数作为环境变量传递。例如,假设您在创建作业时将 cluster-id 作为环境变量传递。您的 EMR 连接命令应类似于以下内容:
%%local import os
%sm_analytics emr connect —cluster-id {os.getenv('cluster_id')} --auth-type None
您需要这种解决方法来满足 SparkMagic 和 Papermill 的要求。对于背景上下文,SparkMagic 内核希望 %%local 魔术命令与您定义的任何局部变量一起使用。不过,Papermill 不会通过您的覆盖来传递 %%local 魔术命令。为了解决这个 Papermill 限制,必须在环境变量字段中将参数作为环境变量提供。
将用户凭证传递给经过 Kerberos、LDAP 或 HTTP Basic Auth 身份验证的 Amazon EMR 集群
要与使用 Kerberos、LDAP 或 HTTP Basic Auth 身份验证的 Amazon EMR 集群建立安全连接,您可以使用 Amazon Secrets Manager 向连接命令传递用户凭证。有关如何创建 Secrets Manager 密钥的信息,请参阅创建 Amazon Secrets Manager 密钥。您的密文必须包含用户名和密码。您通过 --secrets 参数传递密钥,如以下示例所示:
%sm_analytics emr connect --cluster-id j_abcde12345 --auth Kerberos --secret aws_secret_id_123
您的管理员可以使用基于属性的访问权限控制 (ABAC) 方法来设置灵活的访问策略,该方法根据特殊标签分配访问权限。您可以设置灵活的访问权限,为账户中的所有用户创建单个密钥,或为每个用户分别创建一个密钥。以下代码示例演示了这些场景:
为账户中的所有用户创建单个密钥
为每个用户分别创建不同的密钥
您可以使用 PrincipleTag 标签分别为每个用户创建不同的密钥,如以下示例所示: