使用以下方法增强内核 magic EMR工作室中的命令 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用以下方法增强内核 magic EMR工作室中的命令

概述

EMRStudio 和EMR笔记本电脑支持 magic 命令。Magic 命令,或 magics,是IPython内核为帮助您运行和分析数据而提供的增强功能。IPython是一个使用 Python 构建的交互式外壳环境。

亚马逊EMR还支持 Sparkmagic,一个包为与 Spark 相关的内核(、PySpark SparkR 和 Scala 内核)提供特定的 magic 命令并使用集群上的 Livy 提交 Spark 作业。

您可以使用 … magic 只要你的EMR笔记本里有 Python 内核,就可以使用命令。同样,任何与 Spark 相关的内核都支持 Sparkmagic 命令。

Magic 命令,也称为 magics,有两个品种:

  • 线 magics — 这些 magic 命令由单个%前缀表示并对一行代码进行操作

  • 细胞 magics — 这些 magic 命令由双%%前缀表示并对多行代码进行操作

全部可用 magics,请参阅列出 magic 以及 Sparkmagic 命令

注意事项和限制

  • EMR无服务器不支持运行%%shspark-submit。它不支持EMR笔记本电脑 magic。

  • EKS集群EMR上的 Amazon 不支持 Sparkmagic EMRStudio 的命令。这是因为你与托管端点一起使用的 Spark 内核内置在 Kubernetes 中,但不支持这些内核 Sparkmagic 还有 Livy。您可以将 Spark 配置直接设置到 SparkContext 对象中作为解决方法,如以下示例所示。

    spark.conf.set("spark.driver.maxResultSize", '6g')
  • 以下 magic 以下各方禁止命令和操作 Amazon:

    • %alias

    • %alias_magic

    • %automagic

    • %macro

    • 使用 %configure 修改 proxy_user

    • 使用 %env%set_env 修改 KERNEL_USERNAME

列出 magic 以及 Sparkmagic 命令

使用以下命令列出可用的 magic 命令:

  • %lsmagic列出所有当前可用的 magic 函数。

  • %%help列出当前可用的 Spark 相关信息 magic 提供的函数 Sparkmagic 包裹。

使用 %%configure 来配置 Spark

最有用的之一 Sparkmagic %%configurecommands 是用于配置会话创建参数的命令。借助 conf 设置,您可以配置 Apache Spark 配置文档 中提及的任何 Spark 配置。

例 从 Maven 存储库或 Amazon S3 向EMR笔记本添加外部JAR文件

您可以使用以下方法向支持的任何与 Spark 相关的内核添加外部JAR文件依赖关系 Sparkmagic.

%%configure -f {"conf": { "spark.jars.packages": "com.jsuereth:scala-arm_2.11:2.0,ml.combust.bundle:bundle-ml_2.11:0.13.0,com.databricks:dbutils-api_2.11:0.0.3", "spark.jars": "s3://amzn-s3-demo-bucket/my-jar.jar" } }
例 : 配置 Hudi

您可以使用笔记本编辑器将笔记本配置为使用 Hudi。EMR

%%configure { "conf": { "spark.jars": "hdfs://apps/hudi/lib/hudi-spark-bundle.jar,hdfs:///apps/hudi/lib/spark-spark-avro.jar", "spark.serializer": "org.apache.spark.serializer.KryoSerializer", "spark.sql.hive.convertMetastoreParquet":"false" } }

使用 %%sh 运行 spark-submit

这些区域有:%%shmagic 在所连接集群的实例上的子进程中运行 shell 命令。通常,您需要使用其中一个 Spark 相关的内核在附加的集群上运行 Spark 应用程序。但是,如果你想使用 Python 内核提交 Spark 应用程序,你可以使用以下方法 magic,将存储桶名称替换为小写的存储桶名称。

%%sh spark-submit --master yarn --deploy-mode cluster s3://amzn-s3-demo-bucket/test.py

在此示例中,集群需要访问 s3://amzn-s3-demo-bucket/test.py 的位置,否则该命令将失败。

你可以将任何 Linux 命令与 %%sh magic。 如果要运行任何 Spark 或YARN命令,请使用以下选项之一创建 emr-notebook Hadoop 用户并授予该用户运行命令的权限:

  • 您可以通过运行以下命令显式创建新用户。

    hadoop fs -mkdir /user/emr-notebook hadoop fs -chown emr-notebook /user/emr-notebook
  • 您可以在 Livy 中启用用户模拟功能,从而自动创建用户。请参阅启用用户模拟以监控 Spark 用户和任务活动了解更多信息。

使用 %%display 可视化显示 Spark 数据框

你可以使用 %%display magic 来可视化 Spark 数据框。要使用这个 magic,运行以下命令。

%%display df

选择以表格格式查看结果,如下图所示。

使用 %%display 的输出 magic 它以表格格式显示结果。

您也可以选择使用五种类型的图表来可视化数据。您的选项包括饼图、散点图、折线图、面积图和条形图。

使用 %%display 的输出 magic 它以图表格式显示结果。

使用EMR笔记本电脑 magics

Amazon EMR 提供以下EMR笔记本电脑 magic所以你可以与基于 Python3 和基于 Spark 的内核一起使用:

  • %mount_workspace_dir – 将 Workspace 目录挂载到集群,以便您可以从 Workspace 中的其他文件导入和运行代码

    注意

    使用 %mount_workspace_dir 时,只有 Python 3 内核可以访问本地文件系统。Spark 执行器将无法使用此内核访问挂载的目录。

  • %umount_workspace_dir - 从集群中卸载 Workspace 目录

  • %generate_s3_download_url - 在 Notebook 输出中为 Amazon S3 对象生成临时下载链接

先决条件

在安装EMR笔记本之前 magics,完成以下任务:

  • 确保您的 集群EC2实例的服务角色(EC2实例配置文件) 拥有 Amazon S3 的读取访问权限。使用 AmazonElasticMapReduceforEC2Role 托管策略的 EMR_EC2_DefaultRole 满足此要求。如果您使用自定义角色或策略,请确保它拥有必要的 S3 权限。

    注意

    EMR 笔记本 magics 以笔记本用户身份在集群上运行,并使用EC2实例配置文件与 Amazon S3 进行交互。在EMR集群上装载 Workspace 目录时,所有有权连接到该集群的工作空间和EMR笔记本都可以访问已安装的目录。

    预设情况下,目录将以只读方式挂载。虽然 s3fs-fusegoofys 允许读-写挂载,但我们强烈建议您不要将挂载参数修改为以读-写模式挂载目录。如果您允许写入权限,则对目录所做的任何更改都将写入 S3 存储桶。为避免意外删除或覆盖,您可以为 S3 存储桶启用版本控制。要了解更多信息,请参阅在 S3 存储桶中使用版本控制

  • 在集群上运行以下任一脚本来安装 EMR Notebook 的依赖项 magic。要运行脚本,您可以使用自定义引导操作或按照已有正在运行的集群在 Amazon EMR 集群上运行命令和脚本中的说明进行操作。

    您可以选择要安装哪个依赖项。s3fs-fusegoofys 都是FUSE(用户空间中的文件系统)工具,允许您在集群上将 Amazon S3 存储桶作为本地文件系统挂载。该s3fs工具提供的体验类似于POSIX。如果您更喜欢性能而不是POSIX兼容文件系统,则该goofys工具是一个不错的选择。

    亚马逊 EMR 7.x 系列使用亚马逊 Linux 2023,它不支持EPEL存储库。如果你运行的是 Amazon EMR 7.x,请按照 s3fs-f GitHub use 的说明进行安装。s3fs-fuse如果使用 5.x 或 6.x 系列,请使用以下命令安装 s3fs-fuse

    #!/bin/sh # Install the s3fs dependency for EMR Notebooks magics sudo amazon-linux-extras install epel -y sudo yum install s3fs-fuse -y

    或者

    #!/bin/sh # Install the goofys dependency for EMR Notebooks magics sudo wget https://github.com/kahing/goofys/releases/latest/download/goofys -P /usr/bin/ sudo chmod ugo+x /usr/bin/goofys

安装EMR笔记本电脑 magics

注意

在亚马逊EMR发布6.0至6.9.0以及5.0至5.36.0版本的情况下,仅emr-notebooks-magics支持0.2.0及更高版本的软件包 %mount_workspace_dir magic.

完成以下步骤安装EMR笔记本电脑 magic。

  1. 在您的 Notebook 中,运行下面的命令以安装 emr-notebooks-magics 程序包。

    %pip install boto3 --upgrade %pip install botocore --upgrade %pip install emr-notebooks-magics --upgrade
  2. 重启内核以加载EMR笔记本 magic。

  3. 使用下面的命令验证安装,该命令应该显示用于 %mount_workspace_dir 的输出帮助文本。

    %mount_workspace_dir?

使用 %mount_workspace_dir 挂载 Workspace 目录

这些区域有:%mount_workspace_dirmagic 允许您将 Workspace 目录挂载到EMR集群上,以便可以导入和运行存储在目录中的其他文件、模块或包。

下面的示例将整个 Workspace 目录挂载到集群上,并指定可选的 <--fuse-type> 参数,以使用 goofys 挂载目录。

%mount_workspace_dir . <--fuse-type goofys>

要验证您的 Workspace 目录是否已挂载,请使用下面的示例,借助 ls 命令来显示当前的工作目录。输出结果应该显示 Workspace 中的所有文件。

%%sh ls

在 Workspace 中完成更改后,可以使用下面的命令卸载 Workspace 目录:

注意

即使 Workspace 已停止或已分离,您的 Workspace 目录仍会保持挂载到集群上。您必须显式卸载 Workspace 目录。

%umount_workspace_dir

使用 %generate_s3_download_url 下载 Amazon S3 对象

generate_s3_download_url命令为存储在 Amazon S3 中的对象创建预签名URL。您可以使用预签名URL将对象下载到本地计算机。例如,您可以运行generate_s3_download_url下载您的代码写入 Amazon S3 的SQL查询结果。

默认情况下,预签名的有效期URL为 60 分钟。您可以通过指定 --expires-in 标志的秒数来更改过期时间。例如,--expires-in 1800创建有效URL期为 30 分钟的。

下面的示例通过指定完整的 Amazon S3 路径来为对象生成下载链接:s3://EXAMPLE-DOC-BUCKET/path/to/my/object

%generate_s3_download_url s3://EXAMPLE-DOC-BUCKET/path/to/my/object

要了解有关使用 generate_s3_download_url 的更多信息,请运行下面的命令以显示帮助文本。

%generate_s3_download_url?

使用 %execute_notebook 在无头模式下运行 Notebook

%execute_notebook magic,你可以在无头模式下运行另一台笔记本电脑,并查看你运行的每个单元的输出。该 magic 需要获得亚马逊EMR和亚马逊EC2共享的实例角色的额外权限。有关如何授予额外权限的更多信息,请运行命令 %execute_notebook?

如果有长时间运行的任务,系统可能会因为不活动而进入睡眠状态,也可能暂时失去互联网连接。这可能会中断浏览器与 Jupyter 服务器之间的连接。如果出现这种情况,您可能会丢失自己运行的单元格和 Jupyter 服务器发送的单元格的输出内容。

如果你在无头模式下运行笔记本电脑 %execute_notebook magic,即使本地网络出现中断,N EMR otebook 也能捕获已运行的单元的输出。 EMRNotebooks 将输出以增量方式保存在与您运行的笔记本同名的新笔记本中。 EMR然后,笔记本将笔记本放到工作区内的新文件夹中。无头运行发生在同一个集群上并使用 EMR_Notebook_DefaultRole 服务角色,但其他参数可能会更改默认值。

要在无头模式下运行 Notebook,请使用以下命令:

%execute_notebook <relative-file-path>

要为无头运行指定集群 ID 和服务角色,请使用以下命令:

%execute_notebook <notebook_name>.ipynb --cluster-id <emr-cluster-id> --service-role <emr-notebook-service-role>

当亚马逊EMR和亚马逊EC2共享实例角色时,该角色需要以下额外权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:StartNotebookExecution", "elasticmapreduce:DescribeNotebookExecution", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::<AccoundId>:role/EMR_Notebooks_DefaultRole" } ] }
注意

使用 %execute_notebook magic,安装emr-notebooks-magics软件包,版本 0.2.3 或更高版本。