我刚刚开始学习Spark,我试图通过将代码复制到新项目并构建jar来复制SparkPi
示例。 SparkPi
的来源是:https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/SparkPi.scala
我有一个正在运行的YARN群集(运行CDH 5.0.1),我已经上传了火花装配jar并在SPARK_JAR
中设置了它的hdfs位置。
如果我运行此命令,示例有效:
$ SPARK_CLASSPATH=/usr/lib/spark/examples/lib/spark-examples_2.10-0.9.0-cdh5.0.1.jar /usr/lib/spark/bin/spark-class org.apache.spark.examples.SparkPi yarn-client 10
但是,如果我将源复制到一个新项目并构建一个jar并运行相同的命令(使用不同的jar和classname),我会收到以下错误:
$ SPARK_CLASSPATH=Spark.jar /usr/lib/spark/bin/spark-class spark.SparkPi yarn-client 10
Exception in thread "main" org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.<init>(SparkContext.scala:113)
at spark.SparkPi$.main(SparkPi.scala:9)
at spark.SparkPi.main(SparkPi.scala)
不知何故,第一个参数在我的版本中没有作为SparkContext中的master传递,但它在这个例子中工作正常。
查看SparkPi代码,似乎只期望一个数字参数。
那么有什么关于Spark示例jar文件拦截第一个参数并以某种方式设置spark.master
属性是什么?
答案 0 :(得分:2)
这是最近的更改 - 您在第一种情况下运行旧代码并在第二种情况下运行新代码。
以下是更改:https://github.com/apache/spark/commit/44dd57fb66bb676d753ad8d9757f9f4c03364113
我认为现在这将是正确的命令:
/usr/lib/spark/bin/spark-submit Spark.jar --class spark.SparkPi yarn-client 10