将Spark作业提交到Amazon EMR

4

我即将尝试使用EMR,因此现在正在查阅文档。提交过程让我有些困惑。

1)Spark库在哪里?

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

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

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

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

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

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

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

3)是否有一种方法可以通过终端提交应用程序,或者唯一的方法是实际在S3上部署jar?我可以登录到主服务器并从那里进行提交吗?所有必要的Env变量都准备好了(参见前面的问题)?最有效的提交方式是什么?

1个回答

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

  2. 如何提交Spark应用程序?有两种方法

    • a)主节点CLI:使用所有参数发出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控制台:从EMR Web控制台提交Spark应用程序意味着提交EMR步骤,EMR步骤基本上是Spark提交的UI版本,更多信息在此处

  3. --master参数如何工作,它是否由EMR直接设置?如果您使用AWS EMR步骤(即Web控制台方式),则会自动设置此项,UI将自动为您添加此项,但是如果您像问题2a中那样使用CLI,则需要明确提及它。

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

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

5) 提交脚本所需的所有Env变量是否准备就绪?

  • 是的,对于所有与spark/yarn相关的env变量,如果将spark应用程序添加到EMR中,则是完全配置好的可用于使用的spark集群。
  • 否,对于所有自定义env变量,您可以通过利用AWS EMR 引导操作来执行脚本来实现这一点,这只能在集群创建期间完成,更多信息在此处

6) 做此提交的最有效方式是什么?这取决于用例,如果您可以/想要自己管理作业,则只需进行spark-submit,但要获得AWS EMR自动调试日志的优势,则AWS EMR步骤是正确的选择。

更新:

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

  • CLI: Hadoop配置文件位于/etc/hadoop/conf,在主节点上修改这些文件,您可能需要重新启动主节点上的yarn管理器。
  • 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以编程方式执行。


我更感兴趣调整像yarn-site.xml中的yarn.nodemanager.resource.memory-mb这样的Yarn变量。 - MaatDeamon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接