【问题标题】:Submitting Spark job to Amazon EMR将 Spark 作业提交到 Amazon EMR
【发布时间】:2019-04-05 07:09:44
【问题描述】:

我即将尝试 EMR,然后现在就开始阅读文档。我对提交过程有点困惑。

1) spark 库在哪里

从 Spark 文档中我们发现:

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

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

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

来自我们拥有的 spark 文档:

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

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

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

【问题讨论】:

    标签: apache-spark amazon-emr


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

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

      • a) CLI on the master node: issue 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 相关的 env 变量,如果您将 spark 应用程序添加到 EMR,它就是一个完全配置的即用型 spark 集群。
    • 不,对于所有自定义环境变量,实现此目的的一种方法是利用 AWS EMR bootstrap action 执行脚本,该脚本只能在集群创建期间完成,更多信息 here

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

    更新:

    7) 如何更改纱线、火花等的配置?同样有两种选择

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

    【讨论】:

    • 我对在 yarn-site.xml 中的 yarn.nodemanager.resource.memory-mb 之类的 Yarn 变量更感兴趣
    猜你喜欢
    • 2019-07-03
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2020-11-08
    • 2020-10-07
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多