Spark - Error "A master URL must be set in your configuration" when submitting an app

I have an Spark app which runs with no problem in local mode,but have some problems when submitting to the Spark cluster.

The error msg are as follows:

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)

In the above code, GroupEvolutionES is the main class. The error msg says "A master URL must be set in your configuration", but I have provided the "--master" parameter to spark-submit.

Anyone who knows how to fix this problem?

Spark version: 1.6.1

134718 次浏览

在哪里定义了火花上下文对象,它是否在主函数中?

我也面临着同样的问题,我所犯的错误是我在主要功能之外和课堂内部启动了火花上下文。

When I initiated it inside the main function, it worked fine.

How does spark context in your application pick the value for spark master?

  • 您可以在创建 SC 时将其明确地与 SparkConf一起提供。
  • 或者它从 System.getProperties(SparkSubmit 在读取 --master参数之后将其放在此处)中选择。

现在,SparkSubmit在驱动程序上运行——在您的示例中,驱动程序就是执行 spark-submit脚本的机器。这对你来说可能也是意料之中的。

但是,从您发布的信息来看,似乎您正在发送给执行程序的代码中创建一个火花上下文——并且由于那里没有可用的 spark.master系统属性,所以它失败了。(如果是这样的话,你就不应该这么做。)

你可以请张贴的 GroupEvolutionES代码(特别是在您创建 SparkContext(s))。

TLDR:

.config("spark.master", "local")

一个可供选择的列表,在 Spark2.2.1中

在尝试以本地模式运行一个简单的 Spark SQL java 程序之后,我最终来到了这个页面。为了做到这一点,我发现我可以使用:

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

An update to my answer:

需要说明的是,这不是您在生产环境中应该做的事情。在生产环境中,应该在两个其他位置之一指定 parks. master: 可以在 $SPARK _ HOME/conf/park-default 中指定。Conf (Cloudera manager 将把它放在这里) ,或者在提交应用程序时放在命令行上。(火花提交——母线)。

如果您以这种方式将 parks. master 指定为“ local”,则 park 将尝试在单个 jvm 中运行,如下面的注释所示。如果您然后尝试指定—— department-mode 集群,您将得到一个错误“ ClusterDeploymode 与 master“ local”不兼容”。这是因为设置 spok.master = local 意味着您不是在集群模式下运行。

相反,对于一个生产应用程序,在你的主函数中(或者在你的主函数调用的函数中) ,你应该简单地使用:

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

这将使用命令行/配置文件中指定的配置。

另外,需要说明的是: —— master 和“ parks.master”是完全相同的参数,只是用不同的方式指定。像我上面的答案一样,在代码中设置 parks. master 将覆盖设置—— master 的尝试,并覆盖 park-default 中的值。Conf,所以不要在生产环境中这样做。不过对测试很有用。

此外,请参阅 这个答案。 它链接到 火花的选择列表,主人以及每一个实际上做什么。

一个可供选择的列表,在 Spark2.2.1中

替换之后就在我手下工作了

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

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

在堆栈溢出的其他线程上找到了这个解决方案。

替换:

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)
}


}

And after replacing :

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

配合:

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

效果很好!

主机: PORT 的默认值是 park://HOST: PORT,下面的代码尝试从运行在 主持人: 波特上的独立集群中获取一个会话,并期望 HOST: PORT 值位于星火配置文件中。

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

SparkException: 必须在配置中设置主 URL”指出在火花配置文件中没有设置 主持人: 波特

为了不用担心“ HOST: PORT”的值,将 火花,主人设置为 本地

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

这里 是一系列格式的链接,在这些格式中,主 URL 可以传递给 parks. master

参考文献: 火花教程-建立星火生态系统

If you are using following code

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

Then replace with following lines

  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 (“ local [ * ]”)如果在这里运行 local * 意味着所有节点,那么可以说不是81,2等等

You need to set Master URL if on cluster

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")

我们缺少 SetMaster (“ 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 中提供 Spark 配置,那么就会得到这个错误。 那就是: 新的 JavaSparkContext () ;

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

如果你正在运行一个绿色软体,那么你必须使用 SparkContext而不是 SparkSession

val conf = new SparkConf().setAppName("Samples").setMaster("local")
val sc = new SparkContext(conf)
val textData = sc.textFile("sample.txt").cache()

试试这个

有特点

import org.apache.spark.sql.SparkSession
trait SparkSessionWrapper {
lazy val spark:SparkSession = {
SparkSession
.builder()
.getOrCreate()
}
}

延伸它

object Preprocess extends SparkSessionWrapper {

只需将 .setMaster("local")添加到代码中,如下所示:

val conf = new SparkConf().setAppName("Second").setMaster("local")

It worked for me ! Happy coding !

在本地机器中设置 Spark 上下文学习 Spark 处理时尝试了这个选项 1)保持 Spark 会话在本地运行 2)添加 Spark maven 依赖项 3)将输入文件保存在根输入文件夹中 4)输出将放置在输出文件夹。 从雅虎金融下载任何 CSV 获得年度最大股票价值 Https://in.finance.yahoo.com/quote/cappl.bo/history/ Maven 依赖项和下面的 Scala 代码-

<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.4.3</version>
<scope>provided</scope>
</dependency>
</dependencies>


object MaxEquityPriceForYear {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("ShareMaxPrice").setMaster("local[2]").set("spark.executor.memory", "1g");
val sc = new SparkContext(sparkConf);
val input = "./input/CAPPL.BO.csv"
val output = "./output"
sc.textFile(input)
.map(_.split(","))
.map(rec => ((rec(0).split("-"))(0).toInt, rec(1).toFloat))
.reduceByKey((a, b) => Math.max(a, b))
.saveAsTextFile(output)
}

我使用了这个 SparkContext 构造函数,错误消失了:

val sc = new SparkContext("local[*]", "MyApp")