使用魔术命令增强内核 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用魔术命令增强内核

EMR Studio 和 EMR Notebooks 支持魔术命令,这些命令是 IPython 内核为帮助运行和分析数据而提供的增强功能。IPython 是用 Python 构建的交互式 shell 环境。

Amazon EMR 还支持 Sparkmagic,该软件包为 Spark 相关内核(PySpark、SparkR 和 Scala 内核)提供特定的魔术命令,并使用集群上的 Livy 提交 Spark 任务。

只要您的 EMR Notebooks 中有 Python 内核,就可以使用魔术命令。同样,任何与 Spark 相关的内核都支持 Sparkmagic 命令。

魔术命令也称作 magics,有两个种类:

  • 行魔术命令 (Line Magic) — 这类魔法命令用单个 % 前缀表示,并在一行代码上运行

  • 单元格魔术命令 (Cell Magic) — 这类魔法命令用双 %% 前缀表示,并在多行代码上运行

魔术命令的完整列表可在 IPython 网站查到。要了解有关 Sparkmagic 命令的详细信息,请参阅 GitHub 网站的 Sparkmagic

注意事项和限制

Amazon EMR on EKS 集群不支持 EMR Studio 的 Sparkmagic 命令。这是因为与托管式终端节点一起使用的 Spark 内核内置于 Kubernetes,而不受 Sparkmagic 和 Livy 的支持。作为暂时的解决方法,您可以将 Spark 配置直接设置到 SparkContext 对象,如以下示例所示。

spark.conf.set("spark.driver.maxResultSize", '6g')

Amazon出于安全考虑,不允许使用以下魔术命令:

  • %alias

  • %alias_magic

  • %automagic

  • %macro

  • 使用 %configure 修改 proxy_user

  • 使用 %env%set_env 修改 KERNEL_USERNAME

访问所有魔术和 Sparkmagic 命令

使用以下命令,列出所有可用的魔术命令:

  • %lsmagic 列出当前可用的所有魔术函数

  • %%help 列出 Sparkmagic 软件包提供的当前可用的 Spark 相关魔术函数

使用%%configure配置 Spark

Sparkmagic 最有用的命令之一是 %%configure 命令,该命令配置会话创建参数。使用conf 设置,您可以配置 Spark 的配置文档提及的任何 Spark 配置。

例 将外部 JAR 文件从 Maven 存储库或 Amazon S3 添加到 EMR Notebooks

您可以使用以下方法将外部 JAR 文件依赖项添加到 Sparkmagic 支持的任何 Spark 相关内核中。

%%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://DOC-EXAMPLE-BUCKET/my-jar.jar" } }

例 : 配置 Hudi

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

%%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 提交

在附加集群的实例上,%%sh 魔术在子进程运行 shell 命令。通常,您需要使用其中一个 Spark 相关的内核在附加的集群上运行 Spark 应用程序。但是,如果您想使用 Python 内核提交 Spark 应用程序,可以使用以下魔术,以此将存储桶名称替换为小写的存储桶名称。

%%sh spark-submit --master yarn --deploy-mode cluster s3://DOC-EXAMPLE-BUCKET/test.py

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

您可以凭借 %%sh 魔术使用任何 Linux 命令。如果要运行任何 Spark 或 Yarn 命令,请使用以下其中一种选项创建 emr-notebook Hadoop 用户并授予用户运行命令的权限。

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

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