स्पार्क - त्रुटि "एक मास्टर URL आपके कॉन्फ़िगरेशन में सेट किया जाना चाहिए" जब एक एप्लिकेशन सबमिट करें


92

मेरे पास एक स्पार्क ऐप है जो स्थानीय मोड में कोई समस्या नहीं है, लेकिन स्पार्क क्लस्टर में जमा करते समय कुछ समस्याएं हैं।

त्रुटि संदेश इस प्रकार हैं:

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मुख्य वर्ग है। त्रुटि संदेश कहता है "आपके कॉन्फ़िगरेशन में एक मास्टर URL सेट किया जाना चाहिए", लेकिन मैंने "--master" पैरामीटर को प्रदान किया है spark-submit

जो कोई भी इस समस्या को ठीक करना जानता है?

स्पार्क संस्करण: 1.6.1


1
क्या आप कृपया उस स्क्रिप्ट को प्रस्तुत करने के लिए जिस कमांड का उपयोग कर रहे हैं, उसे यहाँ पेस्ट कर सकते हैं।
--४

क्या आपने स्पार्क मास्टर URL प्रदान किया है?
क्षितिज कुलश्रेष्ठ

@ शिवशिव श्रीवास्तव स्पार्क-सबमिट --क्लास GroupEvolutionES --master स्पार्क: // क्लस्टर-नोड- nn1: 7077-jars $ mypath myapp.jar
शुआई झांग

@KSHITIJKULSHRESTHA हां।
शुआई जांग

मैं अपने Sparkप्रोजेक्ट के यूनिट-टेस्ट्स ( DataFrameSuiteBase) में इसमें भाग गया । से @Dazzler के जवाब है, मैं समझ गया कि मैं स्थानांतरित करना होगा DataFrame-creation अंदर test(..) { .. }सुइट्स। लेकिन यह भी सिर्फ इसे (प्रेम !) तय करने की घोषणा DataFrameकर रहा हैlazyScala । यह नीचे दिए गए उनके उत्तर में @gyuseong बताया गया है
y2k-shubham

जवाबों:


39

स्पार्क कॉन्टेक्स्ट ऑब्जेक्ट को कहाँ परिभाषित किया गया है, क्या यह मुख्य कार्य के अंदर है?

मैं भी उसी समस्या का सामना कर रहा था, जो मैंने किया वह गलती मैंने मुख्य समारोह के बाहर और कक्षा के भीतर स्पार्क कॉन्टेक्स्ट शुरू की।

जब मैंने इसे मुख्य कार्य के अंदर शुरू किया, तो यह ठीक काम किया।


11
स्पार्क को वास्तव में सुधार करने की आवश्यकता है: यह बहुत ही भ्रामक और बिना सूचना के त्रुटि संदेश दिखाता है जब कुछ गलत होता है
शुआई झांग

3
यह एक समाधान है और एक समाधान नहीं है, क्या होगा यदि मैं एक एकल प्रसंग बनाना चाहता हूं और कई अनुप्रयोगों के लिए मुख्य कार्य के अलावा प्रसंग की एक अलग परत बनाना है?
मुर्तजा कांचवाला

1
"ध्यान दें कि अनुप्रयोगों को main()विस्तारित करने के बजाय एक विधि को परिभाषित करना चाहिए scala.App। उपवर्ग scala.Appसही तरीके से काम नहीं कर सकते हैं।" स्पार्क 2.1.0 मैनुअल
माराह

जहाँ आप getOrCreate()संदर्भ के लिए प्रयास करते हैं, उस पर ध्यान दें कि ड्राइवर स्तर पर बनाया जाना चाहिए और निष्पादन स्तर पर आवश्यकतानुसार पारित किया जाना चाहिए।
REIM

130

TLDR:

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

स्पार्क के लिए विकल्पों की एक सूची। स्पार्क 2.2.1 में मास्टर

स्थानीय मोड में एक साधारण स्पार्क एसक्यूएल जावा प्रोग्राम चलाने की कोशिश करने के बाद मैं इस पृष्ठ पर समाप्त हुआ। ऐसा करने के लिए, मैंने पाया कि मैं स्पार्क सेट कर सकता हूं।

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

मेरे जवाब के लिए एक अद्यतन:

स्पष्ट होने के लिए, यह वह नहीं है जो आपको उत्पादन वातावरण में करना चाहिए। उत्पादन के माहौल में, स्पार्क.मास्टर को कुछ अन्य स्थानों में से एक में निर्दिष्ट किया जाना चाहिए: या तो $ SPARK_HOME / conf / spark-defaults.conf में (यह वह जगह है जहां क्लाउड प्रबंधक इसे डाल देगा), या कमांड पर जब आप सबमिट करते हैं अप्प। (पूर्व स्पार्क-सबमिट - मास्टर यार्न)।

यदि आप स्पार्क.मास्टर को इस तरह से 'स्थानीय' होने के लिए निर्दिष्ट करते हैं, तो स्पार्क एकल जेवीएम में चलने की कोशिश करेगा, जैसा कि नीचे दी गई टिप्पणियों द्वारा इंगित किया गया है। यदि आप --deploy-mode क्लस्टर को निर्दिष्ट करने का प्रयास करते हैं, तो आपको एक त्रुटि मिलेगी 'क्लस्टर परिनियोजन मोड मास्टर "स्थानीय" सिस्टम के साथ संगत नहीं है। " ऐसा इसलिए है क्योंकि स्पार्क.मास्टर सेट करना = स्थानीय का मतलब है कि आप क्लस्टर मोड में नहीं चल रहे हैं।

इसके बजाय, एक उत्पादन ऐप के लिए, अपने मुख्य फ़ंक्शन के भीतर (या अपने मुख्य फ़ंक्शन द्वारा कहे गए कार्यों में), आपको बस उपयोग करना चाहिए:

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

यह कमांड लाइन पर / विन्यास फाइल में निर्दिष्ट विन्यास का उपयोग करेगा।

इसके अलावा, यह भी स्पष्ट होने के लिए: --मास्टर और "स्पार्कमास्टर" बिल्कुल एक ही पैरामीटर हैं, बस अलग-अलग तरीकों से निर्दिष्ट हैं। कोड में स्पार्क.मास्टर सेट करना, जैसा कि ऊपर दिए गए मेरे उत्तर में है - सेट -मास्टर के प्रयासों को ओवरराइड करेगा, और स्पार्क-डिफॉल्ट्स.कॉन्फ़ में मूल्यों को ओवरराइड करेगा, इसलिए इसे उत्पादन में न करें। हालांकि यह परीक्षण के लिए बहुत अच्छा है।

यह उत्तर भी देखें । जो स्पार्क.मास्टर के लिए विकल्पों की सूची से लिंक करता है और वास्तव में हर एक क्या करता है।

स्पार्क के लिए विकल्पों की एक सूची। स्पार्क 2.2.1 में मास्टर


5
हाँ, ".config (" स्पार्क.मास्टर "," स्थानीय ") को जोड़ना" "ने मेरे लिए भी काम किया।
आशुतोष एस

धन्यवाद यह मेरे लिए काम किया - लेकिन क्या कोई नौसिखिया (मुझे) समझा सकता है कि .config ("स्पार्क.मास्टर", "स्थानीय") क्या कर रहा है? क्या मेरा कोड अभी भी जार में संकलित करने और उत्पादन में चलाने के लिए ठीक होगा?
user1761806 20

4
@ user1761806, जबकि कई उत्तर इसे एक फिक्स के रूप में रिपोर्ट करते हैं, यह मौलिक रूप से स्पार्क प्रक्रियाओं को बदल देता है, केवल एक ही जेवीएम का उपयोग करके। स्थानीय का उपयोग स्थानीय परीक्षण के लिए किया जाता है और इस समस्या को ठीक करने के लिए सही समाधान नहीं है यदि आप एक क्लस्टर में तैनात करना चाहते हैं। मेरे पास समान मुद्दे थे और स्वीकृत उत्तर मेरी समस्या का सही समाधान था।
नथानिएल वेन्ड्ट

58

बदलने के बाद मेरे लिए काम किया

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

साथ में

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

स्टैकओवरफ़्लो पर कुछ अन्य धागे पर यह समाधान मिला।


1
यू सर, मेरा दिन बच गया ... धन्यवाद!
हाको

3
क्या यह ओपी के सवाल को हल करता है? यह इस JVM में एक स्थानीय क्लस्टर बनाता है, कहीं और एक स्टैंडअलोन के साथ संलग्न नहीं होता है।
एज़रोथ

यह समस्या को हल करता है। मुझे नहीं पता (अभी तक) के निहितार्थ के बारे में setMaster("local[2]")(स्पष्टीकरण होना अच्छा होगा), लेकिन इस जवाब को समस्या का समाधान माना जा सकता है।
रिक

मैंने सिर्फ इस जानकारी को शामिल करने के लिए उत्तर को संपादित किया :)
रिक

26

"स्पार्कमास्टर" का डिफ़ॉल्ट मान स्पार्क है: // HOST: पोर्ट, और निम्न कोड स्टैंडअलोन क्लस्टर से एक सत्र प्राप्त करने की कोशिश करता है जो HOST पर चल रहा है : पोर्ट , और HOST की अपेक्षा करता है: पोर्ट मान होना स्पार्क कॉन्फिग फाइल।

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

" org.apache.spark.SparkException: एक मास्टर URL आपके कॉन्फ़िगरेशन में सेट होना चाहिए " बताता है कि HOST: PORT स्पार्क कॉन्फ़िगरेशन फ़ाइल में सेट नहीं है।

"HOST: PORT" के मूल्य के बारे में परेशान नहीं करने के लिए, स्पार्क.मास्टर को स्थानीय के रूप में सेट करें

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

यहाँ प्रारूपों की सूची के लिए लिंक दिया गया है जिसमें मास्टर URL को स्पार्क.मास्टर को पास किया जा सकता है

संदर्भ: स्पार्क ट्यूटोरियल - सेटअप स्पार्क इकोसिस्टम


बहुत बहुत शुक्रिया आपने मेरा दिन बचाया!
जेंटलकोडर

6

यदि आप स्टैंडअलोन एप्लिकेशन चला रहे हैं तो आपको SparkContextइसके बजाय उपयोग करना होगाSparkSession

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

5
.setMaster("local")मेरे लिए इस मुद्दे को हल करने की कुंजी है
tom10271

क्या होगा अगर मैंने इसे सेट किया है लेकिन फिर भी यह त्रुटि है? @ tom10271
अन्ना

@AnnaLeonenko मुझे खेद है लेकिन मैंने एक साल पहले ही स्पार्क एप्लिकेशन को विकसित करना बंद कर दिया है, मैं अपनी याददाश्त को वापस नहीं ला सकता। लेकिन मुझे लगता है कि आपका मास्टर नोड स्थानीय नहीं है जिसे स्पार्क द्वारा प्रबंधित किया जाता है लेकिन यार्न?
tom10271

1
@AnnaLeonenko मैंने अपनी सेटिंग्स जाँच ली हैं। जब मैं इसे स्थानीय रूप से विकास के लिए चला रहा था और मैं केवल मास्टर नोड को प्रबंधित करने के लिए स्पार्क का उपयोग करता हूं, तो मैं इसे localया तो सेट कर दूंगा local[*]। जब मैंने इसे एडब्ल्यूएस ईएमआर में तैनात किया, तो यह समन्वय के लिए यार्न का उपयोग करता है, फिर मैंने मास्टर सेट कियाyarn
टोम 10271

6

.setMaster("local")नीचे दिखाए अनुसार अपना कोड जोड़ें :

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

यह मेरे लिए काम किया! हैप्पी कोडिंग!


3

आपके आवेदन में स्पार्क संदर्भ स्पार्क मास्टर के लिए मूल्य कैसे चुनता है?

  • आप या तो SparkConfSC को बनाते समय इसे आसानी से उपलब्ध कराते हैं ।
  • या यह System.getProperties(जहां स्पार्कसुबमिट पहले आपके --masterतर्क को पढ़ने के बाद इसे डालते हैं ) से चुनता है ।

अब, SparkSubmitड्राइवर पर चलता है - जो आपके मामले में वह मशीन है जहां से आप spark-submitस्क्रिप्ट निष्पादित कर रहे हैं । और यह संभवतः आपके लिए भी अपेक्षित है।

हालाँकि, आपके द्वारा पोस्ट की गई जानकारी से ऐसा लगता है कि आप कोड में एक स्पार्क संदर्भ बना रहे हैं जो एक्ज़िक्यूटर को भेजा गया है - और यह देखते हुए कि वहाँ कोई spark.masterसिस्टम प्रॉपर्टी उपलब्ध नहीं है, यह विफल हो जाता है। (और यदि ऐसा है तो आपको वास्तव में ऐसा नहीं करना चाहिए।)

क्या आप कृपया GroupEvolutionESकोड (विशेष रूप से जहां आप बना रहे हैं SparkContext(s)) को पोस्ट कर सकते हैं ।


1
हाँ। मुझे mainGroupEvolutionES (जो मैंने नहीं किया) के कार्यों में SparkContext बनाया जाना चाहिए था।
शुआई झांग

1
यह एक समाधान है और एक समाधान नहीं है, क्या होगा यदि मैं एक एकल प्रसंग बनाना चाहता हूं और कई अनुप्रयोगों के लिए मुख्य कार्य के अलावा प्रसंग की एक अलग परत बनाना है? मैं इसे कैसे प्राप्त कर सकता हूं इस पर कोई टिप्पणी?
मुर्तजा कांचवाला

2

जगह:

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

जादू किया।


5
क्या आपका समाधान ठीक वैसा ही नहीं है जैसा @Sachin ने पोस्ट किया है?
अकवाल

स्थानीय क्यों [2] आप समझा सकते हैं
सुदर्शन

स्थानीय के बारे में [2] -> stackoverflow.com/questions/32356143/…
raevilman

2

मुझे एक ही समस्या थी, यहाँ संशोधन से पहले मेरा कोड है:

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[*]")

यह ठीक काम किया!


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

यह समाधान मेरे लिए क्या काम कर रहा था। इसे यहां रखने के लिए धन्यवाद। @Mario।
Siwoku Adeola

2

इसे इस्तेमाल करे

लक्षण बनाना

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

इसका विस्तार करता है

object Preprocess extends SparkSessionWrapper {

1

हम सेट करने के लिए सेटमास्टर ("स्थानीय [*]") को याद कर रहे हैं । एक बार हमने जोड़ा तो समस्या हल हो गई।

संकट:

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

0

यदि आप निम्नलिखित कोड का उपयोग कर रहे हैं

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

फिर निम्नलिखित पंक्तियों के साथ बदलें

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

स्पार्क 2.0 में आप निम्न कोड का उपयोग कर सकते हैं

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

आपको जोड़ने की जरूरत है .मास्टर ("स्थानीय [*]") यदि यहाँ स्थानीय चल रहा है * सभी नोड का मतलब है, आप कह सकते हैं 8,2 आदि की आवृत्ति

यदि आपको क्लस्टर पर मास्टर URL सेट करने की आवश्यकता है


0

यदि आप JavaSparkContext में स्पार्क कॉन्फ़िगरेशन प्रदान नहीं करते हैं, तो आपको यह त्रुटि मिलती है। वह है: JavaSparkContext sc = new JavaSparkContext ();

समाधान: JavaSparkContext sc = new JavaSparkContext (conf) प्रदान करें;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.