从您的笔记本电脑连接到 Amazon EMR 集群 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

从您的笔记本电脑连接到 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 连接命令,请在 “环境变量” 字段中提供您的参数,而不是 “创建 Job” 表单(在 “其他选项” 下拉菜单中)的 “参数” 字段。确保 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 基本身份验证的 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

您的管理员可以使用 attribute-based-access-control (ABAC) 方法设置灵活的访问策略,该方法根据特殊标签分配访问权限。您可以设置灵活的访问权限,为账户中的所有用户创建单个密钥,或为每个用户分别创建一个密钥。以下代码示例演示了这些场景:

为账户中的所有用户创建单个密钥

{ "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : {"AWS" : "arn:aws:iam::AWS_ACCOUNT_ID:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"}, "Action" : "secretsmanager:GetSecretValue", "Resource" : [ "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes123-1a2b3c", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes456-4d5e6f", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes789-7g8h9i" ] } ] }

为每个用户分别创建不同的密钥

您可以使用 PrincipleTag 标签分别为每个用户创建不同的密钥,如以下示例所示:

{ "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : {"AWS" : "arn:aws:iam::AWS_ACCOUNT_ID:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"}, "Condition" : { "StringEquals" : { "aws:ResourceTag/user-identity": "${aws:PrincipalTag/user-identity}" } }, "Action" : "secretsmanager:GetSecretValue", "Resource" : [ "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes123-1a2b3c", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes456-4d5e6f", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes789-7g8h9i" ] } ] }