将 Spark 作业提交到 Amazon EMR

Maa*_*mon 4 amazon-emr apache-spark

我即将尝试 EMR,并立即查看文档。我对提交过程有点困惑。

\n\n

1)spark库在哪里

\n\n

从 Spark 文档中我们发现:

\n\n

- Spark.yarn.jars: \n包含要分发到 YARN 容器的 Spark 代码的库列表。默认情况下,Spark on YARN 将使用本地安装的 Spark jar,但 Spark jar 也可以位于 HDFS 上的全局可读位置。这允许 YARN 将其缓存在节点上,这样就不需要在每次应用程序运行时进行分发。例如,要指向 HDFS 上的 jar,请将此配置设置为 hdfs:///some/path。允许使用 Glob。

\n\n
    \n
  • (a) 我想知道 EMR 是如何设置的,即它是由 EMR 设置还是我必须自己设置?
  • \n
\n\n

2) --master 参数如何工作?

\n\n

从 Spark 文档中我们可以得到:

\n\n

- --master:与 Spark 支持的其他集群管理器不同,在 --master 参数中指定 master\xe2\x80\x99s 地址,在 YARN 模式下,ResourceManager\xe2\x80\x99s 地址是从 Hadoop 获取的配置。因此,--master 参数是yarn。

\n\n
    \n
  • (a) 是由 EMR 直接设置的吗?
  • \n
\n\n

3)有没有办法通过终端提交应用程序,或者是在S3上实际部署jar的唯一方法?我可以登录到 master 并从那里进行提交吗?提交脚本工作所需的所有环境变量是否准备就绪(请参阅上一个问题)?执行此提交的最有效方法是什么?

\n

Nav*_*tha 5

  1. 火花库在哪里?spark在路径中可用,这意味着您可以spark-submit从主节点上任何位置的命令行界面运行,但是,如果您想调整 Spark 的配置文件,它们位于/etc/spark/conf/所有节点上。

  2. 如何提交Spark申请?有两种方法

    • a) CLI on the master node:spark-submit所有参数都有问题,例如:spark-submit --class com.some.core.Main --deploy-mode cluster --master yarn --jars s3://path_to_some_jar.jar

    • b) AWS EMR Web console:从 EMR Web 控制台提交 Spark 应用程序意味着提交 EMR 步骤,EMR 步骤基本上是 Spark 提交的 UI 版本,更多信息请参见此处

  3. --master参数是如何工作的,是EMR直接设置的吗?如果您使用 AWS EMR 步骤(即 Web 控制台方式),此设置会自动设置,UI 会自动为您添加此设置,但如果您使用 CLI 作为问题,2a则需要特别提及。

4) 是在 S3 上实际部署 jar 的唯一方法吗?有两种(或多种)方式

  • a) 发布jar(构建文件)s3并在提交时引用它。
  • b) 用SCP将jar复制到master,提交时引用。

5)提交脚本工作所需的所有环境变量都准备好了吗?

  • 是的,对于所有与 Spark/Yarn 相关的环境变量,如果您将spark应用程序添加到 EMR,它就是一个完全配置的即用型spark集群。
  • 不,对于所有自定义环境变量,实现此目的的一种方法是利用 AWS EMRbootstrap action执行脚本,这只能在集群创建期间完成,更多信息请参见此处

6)最有效的提交方式是什么?这取决于用例,如果您可以/想要自己管理作业,只需执行一个操作spark-submit即可获得 AWS EMR 自动调试日志的优势,那么AWS EMR step就是正确的方法。

更新:

7)如何更改yarn、spark等配置?再次有两个选择

  • CLI:Hadoop conf 文件位于/etc/hadoop/conf,在主节点上修改这些文件,您可能必须在主节点上重新启动纱线管理器。
  • AWS Web 控制台:您可以在创建集群时在 Web 控制台上提交配置(如此处所述)例如,如果要启用 YARN FAIR 调度,则要提供的配置 JSON 将如下所示

    { 'classification': 'yarn-site', 'Properties': { 'yarn.resourcemanager.scheduler.class':'org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler' } }

PS:我忘了提及,几乎无论您在 AWS Web 控制台上可以执行什么操作,您都可以使用 AWS CLI 或 AWS SDK 以编程方式执行相同的操作。