我注意到在我的项目中有两种运行spark作业的方法。
-
第一种方法是提交作业以激发提交文件
/bin/spark-submit
--class org.apache.spark.examples.ParkPi
--master local[8]
/path/to/examples.jar
100 -
第二种方法是将java文件打包到jar中,并通过hadoop运行它,同时在MainClassName:中包含Spark代码
hadoop-jar JarFile.jar MainClassName
`这两种方式有什么区别?我需要具备哪些先决条件才能使用其中一个?
正如您在运行spark作业的第二种方法中所说,用spark类和/或语法打包java文件本质上是将您的spark作业封装在Hadoop作业中。这可能有其缺点(主要是你的工作直接依赖于你的系统/集群上的java和scala版本,但也有一些关于不同框架版本之间支持的成长烦恼(。因此,在这种情况下,开发人员必须小心在两个不同平台上运行作业的设置,即使对于Hadoop的用户来说,这似乎有点简单,因为他们更好地掌握了Java和Map/Reduce/Driver布局,而不是Spark已经调整过的性质和Scala那种陡峭的学习曲线的便利性。
提交作业的第一种方式是最";标准";(就大多数使用情况而言,它可以在网上看到,所以对此持谨慎态度(,几乎完全在Spark中操作作业的执行(当然,除非您存储作业的输出或从HDFS获取其输入(。通过使用这种方式,您只在一定程度上依赖Spark,使Hadoop的奇怪方式(也称为YARN资源管理(远离您的工作。而且,由于它是最直接的方法,因此它的执行时间可以大大加快。