【问题标题】:What is the difference between submitting spark job to spark-submit and to hadoop directly?将 spark 作业提交到 spark-submit 和直接提交到 hadoop 有什么区别?
【发布时间】:2020-11-19 23:41:31
【问题描述】:

我注意到在我的项目中有两种运行 spark 作业的方法。

  1. 第一种方法是将作业提交到 spark-submit 文件

    ./bin/spark-submit
    --class org.apache.spark.examples.SparkPi
    --master 本地[8]
    /path/to/examples.jar
    100

  2. 第二种方法是将java文件打包成jar并通过hadoop运行,同时在MainClassName里面有Spark代码:

    hadoop jar JarFile.jar MainClassName

` 这两种方式有什么区别? 我需要具备哪些先决条件才能使用它们?

【问题讨论】:

  • 我相信它将被添加到类路径中的 JAR 类型。 hadoop jar 只会在执行 JAR 时将 hadoop 相关的 JAR 添加到类路径,而 spark-submit 将添加 spark core、sql 以及 hadoop 相关的 JAR。
  • 我怀疑 hadoop jar 是否适用于 Spark。无法传递执行器参数,例如,您也不应该在代码中手动setMaster,因此它不会知道在YARN中运行
  • philantrovert,看起来 haddop jar 命令正在 hadoop 上执行 jar:stackoverflow.com/questions/13012511/…。问题是如果它不是 mapreduce jar,它是如何并行化的。
  • 好吧,它根本不应该运行,因为hadoop jar 没有将 Spark 库放入类路径中。你的 uber jar 也不应该包含 spark-core

标签: apache-spark hadoop hadoop-yarn


【解决方案1】:

正如您在运行 spark 作业的第二种方式中所述,使用 Spark 类和/或语法打包 java 文件本质上是将您的 Spark 作业包装在 Hadoop 作业中。这可能有其缺点(主要是您的工作直接依赖于您的系统/集群上的 java scala 版本,但对于不同框架版本之间的支持也有一些成长的烦恼)。因此,在这种情况下,开发人员必须注意作业将在两个不同平台上运行的设置,即使对于更熟悉 Java 和 Map/Reduce/Driver 的 Hadoop 用户来说,这似乎更简单一些。布局,而不是 Spark 已经经过调整的特性和 Scala 的那种陡峭学习曲线的便利性。

第一种提交作业的方式是最“标准”的(就其大部分使用情况而言,它可以在网上看到,所以对此持保留态度),几乎完全在 Spark 中操作作业的执行(当然,除非您存储作业的输出或从 HDFS 获取其输入)。通过使用这种方式,您只会在一定程度上依赖 Spark,从而使 Hadoop(也称为 YARN 资源管理)的奇怪方式远离您的工作。而且它的执行时间可以显着加快,因为它是最直接的方法。

【讨论】:

  • 谢谢你,课程!那么第二种方式是绝对有效的吗?我想知道 Hadoop 如何处理非 mapreduce 作业。这个 jar 是否只在一个节点上执行,该节点将作为 Spark 的驱动程序?
  • 它们都是有效的,只是简单的spark-submit 是最常见和最直接的。至于非 MR 作业的处理,Hadoop 可以使用其生态系统中的工具/框架进行扩展(可以在此处看到一些扩展:analyticsvidhya.com/blog/2020/10/introduction-hadoop-ecosystem)。以.jar 文件为参数的命令将在集群的主节点/驱动程序上执行,而其余节点将处理驱动程序将确定的负载(其中大部分已完全完成Spark 内部)。
  • 作为对我的评论的扩展,以及关于 hadoom 生态系统的事情,拥有类似东西的最简单的方法是只使用 Hadoop 的 HDFS 并在 Spark 上处理你的工作/程序.是的,您可以在 Hadoop 环境中运行 Spark 命令,但这有点不合时宜,因为 Spark 在并行执行方面几乎胜过 Hadoop 的每个方面。主要关注点应该是我应该在这两个框架中的哪个框架中开发/设计/调整我的工作?
  • 课程,但是“是的,您可以在 Hadoop 环境中运行 Spark 命令”是什么意思? Spark 有自己的集群,包含多种类型的节点,所有 spark 命令都在该集群内执行,对吧?那么“在 Hadoop 环境中运行 Spark 命令”是什么意思?
  • >>以.jar文件为参数的命令将在集群的主节点/驱动程序上执行-您是指Hadoop集群还是Spark集群?
猜你喜欢
  • 1970-01-01
  • 2019-04-05
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多