2014-06-13 11 views
8

मैंने जावा का उपयोग करके अपाचे स्पार्क एप्लिकेशन बनाया है। यह सब "स्पार्क" शब्द 1000 बार वाली रेखाओं की गणना कर रहा है।स्पार्क जावा एपिलसीशन: java.lang.ClassNotFoundException

public class Example1 { 
    public static void main(String[] args) { 
     String logfile = args[0]; 
     try{ 
      SparkConf conf = new SparkConf(); 
      conf.setAppName("Sample"); 
      conf.setMaster("spark://<master>:7077"); 
      conf.set("spark.executor.memory", "1g"); 
      JavaSparkContext sc = new JavaSparkContext(conf); 
      JavaRDD<String> logData = sc.textFile(logfile).cache(); 
      long count = 0; 
      for(int i=0; i<=1000; i++){ 
       count += logData.filter(new Function<String, Boolean>(){ 
        public Boolean call(String s){ 
         if (s.toLowerCase().contains("spark")) 
          return true; 
         else 
          return false; 
        } 
       }).count(); 
      } 
     } 
     catch(Exception ex){ 
      System.out.println(ex.getMessage()); 
     } 
    } 
} 

जब मैं ग्रहण आईडीई में एक डिबग करने के लिए, मैं java.lang.ClassNotFoundException का सामना कर रहा हूँ:

WARN scheduler.TaskSetManager: Loss was due to java.lang.ClassNotFoundException 
java.lang.ClassNotFoundException: org.spark.java.examples.Example1$1 
at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:323) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:268) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:270) 

मैं भी क्लस्टर spark-submit का उपयोग कर के अंदर इस तैनात करने की कोशिश की, लेकिन अभी भी

यहाँ मेरी कोड है , एक ही अपवाद का सामना करना पड़ा था।

ERROR Executor: Exception in task ID 4 
java.lang.ClassNotFoundException: org.spark.java.examples.Example1$1 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
at java.lang.Class.forName0(Native Method) 

यह कैसे हल करने पर कोई भी विचार: यहाँ स्टैकट्रेस के एक हिस्से को है? अग्रिम में धन्यवाद!

+0

उत्सुक क्यों एक ही फिल्टर से अधिक 1000x पाशन की जरूरत? – maasg

+0

इस @maasg एक संभव बड़ा/लंबे काम की नकल है, और जाँच यह कितना समय लगेगा जब – jaysonpryde

उत्तर

10

आपको श्रमिकों को अपने काम के साथ जार वितरित करने की आवश्यकता है। ऐसा करने के लिए, Maven एक जार का निर्माण और संदर्भ के लिए है कि जार जोड़ने है

conf.setJars(new String[]{"path/to/jar/Sample.jar"}); [*] 

एक 'असली' काम के लिए आप निर्भरता (जाँच Maven छाया प्लगइन) के साथ एक जार का निर्माण करने की आवश्यकता होगी, लेकिन एक साधारण के लिए कोई बाहरी निर्भरता के साथ नौकरी, एक साधारण जार पर्याप्त है।

[*] मैं स्पार्क जावा एपीआई से बहुत परिचित नहीं हूं, मान लीजिए कि यह ऐसा कुछ होना चाहिए।

+0

सुझाव के लिए धन्यवाद क्लस्टर पर भाग गया करने के लिए बस है। मैं इस परीक्षण करेंगे और अगर यह काम करता है – jaysonpryde

+0

@maasg यह शारीरिक जार पथ के साथ मेरे लिए काम करता है जैसे आप ऊपर अपने उदाहरण में उल्लेख किया है लेकिन जब मैं ') की कोशिश conf.setJars (SparkContext.jarOfClass (Application.class आप में वापस मिल जाएगा। toList()) 'यह काम नहीं करता है। कोई उपाय? – nir

+0

जेसन - जब से तुम कहना है कि इस सुझाव _your मूल question_ हल हो गई है, तो आप इसे स्वीकार करना चाहिए। फिर अपने [नहीं-एक-जवाब] से विवरण के साथ एक नया सवाल पर चलते (http://stackoverflow.com/a/24243594/1677912), पीठ संदर्भ के लिए यह एक का जिक्र है। – Mogsdad

3

आपको कार्यकर्ता के कक्षा में अपने जार को शामिल करना होगा। आप दो तरह से कर सकते हैं:

पहला एक अनुशंसित विधि है।

1

यह भी हो सकता है यदि आप spark-submit कमांड लाइन का उपयोग करते समय पूर्ण पैकेज नाम निर्दिष्ट नहीं करते हैं। आवेदन के लिए आपके main विधि test.spark.SimpleApp में है तो कमांड लाइन कुछ इस तरह ही नज़र आना चाहिए:

./bin/spark-submit --class "test.spark.SimpleApp" --master local[2] /path_to_project/target/spark_testing-1.0-SNAPSHOT.jar 

शामिल करना और --class "SimpleApp"ClassNotFoundException साथ असफल हो जायेगी।

संबंधित मुद्दे