Spark – 错误“提交应用程序时,必须在您的configuration中设置主url”

我有一个在本地模式下运行没有问题的Spark应用程序,但在提交给Spark群集时遇到一些问题。

错误信息如下:

16/06/24 15:42:06 WARN scheduler.TaskSetManager: Lost task 2.0 in stage 0.0 (TID 2, cluster-node-02): java.lang.ExceptionInInitializerError at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579) at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579) at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:390) at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1595) at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157) at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157) at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858) at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858) at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) at org.apache.spark.scheduler.Task.run(Task.scala:89) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.spark.SparkException: A master URL must be set in your configuration at org.apache.spark.SparkContext.<init>(SparkContext.scala:401) at GroupEvolutionES$.<init>(GroupEvolutionES.scala:37) at GroupEvolutionES$.<clinit>(GroupEvolutionES.scala) ... 14 more 16/06/24 15:42:06 WARN scheduler.TaskSetManager: Lost task 5.0 in stage 0.0 (TID 5, cluster-node-02): java.lang.NoClassDefFoundError: Could not initialize class GroupEvolutionES$ at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579) at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579) at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:390) at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1595) at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157) at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157) at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858) at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858) at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) at org.apache.spark.scheduler.Task.run(Task.scala:89) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) 

在上面的代码中, GroupEvolutionES是主要的类。 msg错误表示“您的configuration中必须设置主URL”,但是我已经提供了“–master”参数给spark-submit

任何人知道如何解决这个问题?

Spark版本:1.6.1

sparkContext对象在哪里定义,它在主函数内部吗?

我也面临同样的问题,我所做的错误是我发起主要function和类内的sparkContext。

当我在主函数中启动它时,它工作正常。

replace后为我工作

 SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME"); 

 SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[2]").set("spark.executor.memory","1g"); 

在stackoverflow的其他线程上find这个解决scheme。

尝试在本地模式下运行一个简单的Spark SQL Java程序后,我结束了这个页面。 要做到这一点,我发现我可以设置spark.master使用:

 SparkSession spark = SparkSession .builder() .appName("Java Spark SQL basic example") .config("spark.master", "local") .getOrCreate(); 

我的答案更新:

要清楚的是,这不是在生产环境中应该做的。 在生产环境中,spark.master应该在其他地方的其中一个地方指定:在$ SPARK_HOME / conf / spark-defaults.conf中(这是clouderapipe理器放置的地方),或者在提交时在命令行该应用程序。 (如火花提交 – 主纱)。

如果以这种方式指定spark.master为“local”,则spark将尝试在单个jvm中运行,如下面的注释所示。 如果您尝试指定–deploy-mode集群,则会出现错误“集群部署模式与主节点”local“不兼容。 这是因为设置spark.master = local意味着你没有以集群模式运行。

相反,对于生产应用程序,在主要function(或主函数调用的function)内,应该简单地使用:

 SparkSession .builder() .appName("Java Spark SQL basic example") .getOrCreate(); 

这将使用命令行/在configuration文件中指定的configuration。

此外,也要清楚这一点: – 大师和“spark.master”是完全相同的参数,只是以不同的方式指定。 在代码中设置spark.master,就像我上面的回答一样,将会覆盖尝试设置–master,并且会覆盖spark-defaults.conf中的值,所以不要在生产环境中执行。 它非常适合testing。

另外,看到这个答案 。 它链接到spark.master的选项列表以及每个实际的function。

“spark.master”的默认值是spark:// HOST:PORT,下面的代码尝试从在HOST:PORT运行的独立群集中获取会话,并且期望HOST:PORT值位于火花configuration文件。

 SparkSession spark = SparkSession .builder() .appName("SomeAppName") .getOrCreate(); 

org.apache.spark.SparkException:必须在您的configuration中设置一个主URL ”,表明HOST:PORT没有在sparkconfiguration文件中设置。

为了不打扰“HOST:PORT”的值,把spark.master设置为本地

 SparkSession spark = SparkSession .builder() .appName("SomeAppName") .config("spark.master", "local") .getOrCreate(); 

这里是主URL可以传递给spark.master的格式列表的链接

应用程序中的火花上下文如何为火花主控select值?

  • 您可以在创buildSC时使用SparkConf其明确提供。
  • 或者从System.getProperties (在读取您的--master参数后,SparkSubmit先前将其放入)。

现在, SparkSubmit在驱动程序上运行 – 在您的情况下,您正在执行spark-submit脚本的机器。 这也许可以按照你的预期工作。

然而,从你发布的信息来看,你看起来像是在发送给执行程序的代码中创build了一个spark上下文,并且在那里没有spark.master系统属性,它就会失败。 (如果是这样的话,你不应该这样做。)

你可以请发布GroupEvolutionES代码(特别是你创buildSparkContext(s) )。

replace:

 SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME"); WITH SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[2]").set("spark.executor.memory","1g"); 

做了魔术。

我有同样的问题,这是我修改之前的代码:

 package com.asagaama import org.apache.spark.SparkContext import org.apache.spark.SparkConf import org.apache.spark.rdd.RDD /** * Created by asagaama on 16/02/2017. */ object Word { def countWords(sc: SparkContext) = { // Load our input data val input = sc.textFile("/Users/Documents/spark/testscase/test/test.txt") // Split it up into words val words = input.flatMap(line => line.split(" ")) // Transform into pairs and count val counts = words.map(word => (word, 1)).reduceByKey { case (x, y) => x + y } // Save the word count back out to a text file, causing evaluation. counts.saveAsTextFile("/Users/Documents/spark/testscase/test/result.txt") } def main(args: Array[String]) = { val conf = new SparkConf().setAppName("wordCount") val sc = new SparkContext(conf) countWords(sc) } } 

更换后:

 val conf = new SparkConf().setAppName("wordCount") 

带有:

 val conf = new SparkConf().setAppName("wordCount").setMaster("local[*]") 

它工作正常!

 var appName:String ="test" val conf = new SparkConf().setAppName(appName).setMaster("local[*]").set("spark.executor.memory","1g"); val sc = SparkContext.getOrCreate(conf) sc.setLogLevel("WARN") 

如果您使用以下代码

  val sc = new SparkContext(master, "WordCount", System.getenv("SPARK_HOME")) 

然后用下面的行代替

  val jobName = "WordCount"; val conf = new SparkConf().setAppName(jobName); val sc = new SparkContext(conf) 

在Spark 2.0中,您可以使用以下代码

 val spark = SparkSession .builder() .appName("Spark SQL basic example") .config("spark.some.config.option", "some-value") .master("local[*]")// need to add .getOrCreate() 

你需要添加.master(“本地[*]”)如果本地运行*意味着所有的节点,你可以说insted 8 1,2等

您需要在集群上设置主URL

我们缺lesssetMaster(“local [*]”)来设置。 一旦我们添加,然后问题得到解决。

问题:

 val spark = SparkSession .builder() .appName("Spark Hive Example") .config("spark.sql.warehouse.dir", warehouseLocation) .enableHiveSupport() .getOrCreate() 

解:

 val spark = SparkSession .builder() .appName("Spark Hive Example") .config("spark.sql.warehouse.dir", warehouseLocation) .enableHiveSupport() .master("local[*]") .getOrCreate() 

如果你没有在JavaSparkContext中提供Sparkconfiguration,那么你会得到这个错误。 即:JavaSparkContext sc = new JavaSparkContext();

解决scheme:提供JavaSparkContext sc = new JavaSparkContext(conf);