提问者:小点点

火花和纱线。SparkPi示例如何使用第一个参数作为主网址?


我刚刚开始学习Spark,我试图通过将代码复制到一个新项目中并构建一个jar来复制< code>SparkPi示例。< code>SparkPi的源代码是:https://github . com/Apache/spark/blob/master/examples/src/main/Scala/org/Apache/spark/examples/spark pi . Scala

我有一个工作线程集群(运行CDH 5.0.1),我已经上传了spark assembly jar并在< code>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和类名),则会出现以下错误:

$ 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中的主参数传递,但在示例中它工作得很好。

看看SparkPi代码,它似乎只需要一个数字参数。

那么,Spark examples jar文件是否拦截了第一个参数,并以某种方式将< code>spark.master属性设置为该值?


共1个答案

匿名用户

这是最近的变化——您在第一种情况下运行旧代码,在第二种情况下运行新代码。

以下是变化:https://github.com/apache/spark/commit/44dd57fb66bb676d753ad8d9757f9f4c03364113

我认为这将是现在正确的命令:

/usr/lib/spark/bin/spark-submit Spark.jar --class spark.SparkPi yarn-client 10