亚马逊AWS官方博客

EMR Notebooks: 基于 Jupyter Notebook 的托管分析环境

Original URL:https://aws.amazon.com/blogs/big-data/emr-notebooks-a-managed-analytics-environment-based-on-jupyter-notebooks/

笔记本正日益成为交互式开发大数据应用程序的标准工具。原因显而易见。它们灵活的架构支持试验多种语言的数据、以交互形式测试代码及可视化大型数据集。为了帮助科学家和开发人员轻松访问笔记本工具,我们推出了  Amazon EMR Notebooks,这是一个基于流行的开源 Jupyter Notebook 应用程序的托管笔记本环境。EMR Notebooks 支持 Spark Magic 内核,从而可让您使用 PySpark、Spark SQL、Spark R 和 Scala 等语言在 EMR 集群上远程提交作业。Spark Magic内核通过 Apache Livy 提交 Spark 代码,Apache Livy 是在集群上运行的 Spark 的 REST 服务器。

EMR Notebooks 旨在帮助您轻松使用 Apache Spark 试验和构建应用程序。在本博文中,我将先介绍 EMR Notebooks 具备的一些优势。然后,我将介绍它的一些功能,例如将笔记本分离并附加到不同的 EMR 集群、从笔记本内部监控 Spark 活动、使用标签控制用户权限,以及设置用户模拟来跟踪笔记本用户及其操作。要了解如何创建和使用 EMR Notebooks,您可以访问使用 Amazon EMR Notebooks 或观看 AWS 在线技术讲座网络研讨会

EMR Notebooks 的优势

EMR Notebooks 的一个有用的功能是可以将笔记本环境与底层集群基础设施相分离。分离有助于您轻松针对暂时性集群执行笔记本代码,而不必为每次启动新集群时部署或配置笔记本基础设施而费心。您可以从 AWS 管理控制台为 EMR 创建多个无服务器笔记本,并访问笔记本 UI,而无需花费时间设置 SSH 访问或为端口转发配置浏览器。您创建的每个笔记本都会立即启动,并带有自己的 Spark 上下文。借助该功能,您能够将多个笔记本附加到单个共享集群,并提交并行作业,而不必担心在多租户环境中出现作业冲突。这样就可以高效地利用集群。

另外,您还可以将 EMR Notebooks 连接到如单节点般大小的 EMR 集群。这为您提供了一个经济实惠的沙盒环境来开发 Spark 应用程序。

最后,利用 EMR Notebooks,您不必花费时间手动配置笔记本来持久存储文件。您的笔记本文件会定期自动保存到选定的 Amazon S3 存储桶,这样您就不必担心在集群关闭时丢失工作。您可以从控制台检索保存的笔记本,也可以从 S3 存储桶以 Jupyter“ipynb”格式下载到本地。

分离 EMR Notebooks 并附加到不同的集群

利用 EMR Notebooks,您可以将活动的笔记本与某个集群分离,并将其附加到另一个集群,然后立即恢复工作。如果您要将笔记本从沙盒开发集群移至生产环境,或者附加到另一个具有适当 CPU 或内存资源的集群,以及包含针对大型数据集执行笔记本所需的库包的集群,在这些情况下,此功能非常有用。要分离活动笔记本,请执行以下操作:

首先选择笔记本名称,然后选择停止

等待笔记本名称旁边显示的笔记本状态从就绪变为已停止,然后选择更改集群

在您停止笔记本后,可以选择将其附加到同一个 VPC 中的另一个集群,也可以创建一个新集群。EMR Notebooks 自动将笔记本附加到集群并重新启动笔记本。

监控并调试 Spark 作业

EMR Notebooks 支持一个名为 SparkMonitor 的内置 Jupyter 笔记本小部件,用于监控从笔记本启动的所有 Spark 作业的状态,而无需连接到 Spark Web UI 服务器。

这个小部件会出现和自动集成到笔记本的单元结构内,并显示从笔记本的每个单元提交的作业的详细状态,从而为您提供不同作业阶段的实时进展。对于任何失败的作业,此小部件还提供指向 Amazon S3 中容器日志的嵌入式链接,从而让您能够访问相关日志并调试作业。

另外,如果您已将集群配置为接受 SSH 连接,则可以从笔记本中访问 Spark 应用程序 Web UI 和 Hadoop 作业历史记录服务器。这样,您可以查看事件时间轴,查看每个作业的有向无环图 (DAG),以及查看详细的系统和运行时信息以检查和调试代码。首次从笔记本运行 Spark 代码时,这些 Web UI 将自动可用。

编写基于标签的策略以控制笔记本和用户的用户权限

默认情况下,EMR Notebooks 是共享的资源,您组织中任何可以访问您 AWS 账户的人员都可以打开、编辑甚至删除这些共享资源。如果您想对笔记本进行更多的控制,可以使用标签来标记您的笔记本,并编写 IAM 策略来控制其他用户的访问。为帮您快速上手,当您创建笔记本时,带有键字符串 creatorUserId 的默认标签会设置为创建该笔记本的用户的 IAM 用户 ID 值。

您可以使用此标签将笔记本上允许的操作限制为仅限笔记本的创建者执行。例如,将下面的权限策略语句附加到角色或用户时,IAM 用户将仅能够查看、启动、停止、编辑或删除他们自己创建的那些笔记本。此策略语句使用 EMR Notebooks 在您创建笔记本时使用的默认标签。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "elasticmapreduce:DescribeEditor",
                "elasticmapreduce:StartEditor",
                "elasticmapreduce:StopEditor",
                "elasticmapreduce:DeleteEditor",
                "elasticmapreduce:OpenEditorInConsole"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "elasticmapreduce:ResourceTag/creatorUserId": "${aws:userId}"
                }
            }
        }
    ]

您可以编写策略来强制在启动笔记本之前创建标签。例如,以下策略要求用户不可以更改或删除默认添加的 creatorUserID 标签。变量 ${aws:userId} 用于指定当前活动用户的用户 ID,该用户 ID 是标签的默认值。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "elasticmapreduce:CreateEditor"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}"
                }
            }
        }
    ]
}

您可以使用笔记本标签和 EMR 集群标签来控制笔记本用户对集群的访问。标记笔记本和集群,除了保护资源之外,还允许您跨不同的业务部门对 EMR 集群成本进行分类、跟踪和分配。例如,以下策略允许用户创建一个笔记本,且该笔记本有一个标签,其键字符串为“department”,值设置为“Analytics”,此外,该笔记本仅可以附加到所含标签的键字符串为“cost-center”且值设置为“12345”的 EMR 集群。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "elasticmapreduce:StartEditor"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*",
            "Condition": {
                "StringEquals": {
                    "elasticmapreduce:ResourceTag/department": [
                        "Analytics"
                    ]
                }
            }
        },
        {
            "Action": [
                "elasticmapreduce:StartEditor"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*",
            "Condition": {
                "StringEquals": {
                    "elasticmapreduce:ResourceTag/cost-center": [
                        "12345"
                    ]
                }
            }
        }
    ]
}

要了解有关笔记本标签和集群标签的更多信息,可以访问使用标签控制用户权限为集群添加标签。另外,还可以访问使用成本分配标签,详细了解如何在 AWS 账单和成本管理控制台中使用标签生成成本分配报告。

通过强制使用用户模拟来跟踪笔记本用户

EMR Notebooks 允许多个用户在一个共享的 EMR 集群中同时执行自己的笔记本代码,从而可提高集群利用率。默认情况下,由这些不同的用户从他们的笔记本中生成的所有 Spark 作业都以同一个用户身份(livy 用户)在 EMR 集群上运行。如果您的公司政策要求设置审计跟踪并跟踪共享集群上的各个笔记本用户操作,您可以使用 EMR Notebooks 的用户模拟功能。利用此功能,您能够将所有笔记本用户从其笔记本执行的作业与用户的 IAM 身份相关联,从而区分和审计所有笔记本用户。要使用此功能,您应该在创建和启动 EMR 集群时通过配置 core-sitelivy-conf 配置分类来启用 Livy 用户模拟,如下所示:

[
    {
        "Classification": "core-site",
        "Properties": {
          "hadoop.proxyuser.livy.groups": "*",
          "hadoop.proxyuser.livy.hosts": "*"
        }
    },
    {
        "Classification": "livy-conf",
        "Properties": {
          "livy.impersonation.enabled": "true"
        }
    }
]

要了解有关如何配置应用程序的更多信息,请访问配置应用程序。启用此功能后,EMR Notebooks 将在主节点上为每个用户身份创建 HDFS 用户目录。这意味着,来自笔记本的所有 Spark 作业都以 IAM 用户的身份运行,而不是以模糊的用户 livy 身份运行。例如,如果用户 NB_User1 从笔记本编辑器运行代码,会在主节点上创建一个名为 user_NB_User1 的用户目录,且所有 Spark 作业都会以 user_NB_User1 用户身份运行。然后,您可以使用 AWS CloudTrail 等服务,通过创建跟踪来审计用户 NbUser1 的操作记录。要了解有关设置审计跟踪的更多信息,请参阅在 AWS CloudTrail 中记录 Amazon EMR API 调用

小结

在本博文中,我重点介绍了 EMR Notebooks 的一些功能,例如更改集群、监控每个笔记本单元的 Spark 作业、控制用户权限和对资源成本进行分类。要执行这些操作,您可以使用笔记本和集群标签并设置用户模拟来跟踪笔记本用户操作。

顺便说一下,使用 EMR Notebooks 无需支付额外费用,您只需照常支付 EMR 集群的使用费用即可!

如果您有任何问题或建议,欢迎留言。

 


关于作者

Vignesh Rajamani 是 AWS EMR 的高级产品经理。

 

 

 

 

Nikki Rouda 是 AWS 数据湖和大数据的首席产品营销经理。20 多年来,Nikki 一直帮助 40 多个国家或地区的企业开发和实施解决方案,来应对分析和 IT 基础架构挑战。Nikki 拥有剑桥大学的 MBA 学位和布朗大学的地球物理和数学学士学位。