将spark job提交到spark-submit和直接提交到hadoop有什么区别?

What is the difference between submitting spark job to spark-submit and to hadoop directly?

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

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

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

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

    hadoop jar JarFile.jar MainClassName

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

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

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