将 Spark 作业提交到 Amazon EMR

Submitting Spark job to Amazon EMR

我即将尝试使用 EMR,并从现在开始浏览文档。我对提交过程有点困惑。

1) spark 库在哪里

从 Spark 文档中我们发现:

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

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

从 spark 文档我们有:

- --master:不同于Spark支持的其他集群管理器在--master参数中指定master的地址,在YARN模式下,ResourceManager的地址被拾取来自 Hadoop 配置。因此,--master 参数是 yarn.

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

  1. spark 库在哪里? 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 步骤基本上是一个 UI 版本的 spark 提交,更多信息 here

  3. --master参数怎么用,是EMR直接设置的吗?如果您使用 AWS EMR 步骤(即 web 控制台方式),这是自动设置的,UI 会自动为您添加它,但如果您使用 CLI 作为问题 2a,那么您需要具体说一下

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

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

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

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

6) 执行此提交最有效的方法是什么?这取决于用例,如果你 can/want 自己管理工作,只需做一个 spark-submit 但要获得 AWS EMR 自动调试日志的优势,那么 AWS EMR step 就是这样去吧。

更新:

7) 如何改变纱线、火花等的配置?同样有两个选项

  • CLI:Hadoop conf 文件位于 /etc/hadoop/conf,在主节点上修改这些文件,您可能需要在主节点上重新启动 yarn 管理器。
  • AWS Web控制台:您可以在创建集群时如here所述在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 以编程方式执行相同的操作。