मैं जिराफ इनक्यूबेटर (https://cwiki.apache.org/confluence/display/GIRAPH/Shortest+Paths+Example) से सबसे कम पथ उदाहरण चलाने की कोशिश कर रहा हूं। हालांकि giraph - * - dependencies.jar से उदाहरण निष्पादित करने के बजाय, मैंने अपना खुद का काम जार बनाया है। जैसा उदाहरण में प्रस्तुत किया तो मैं एक ही नौकरी बना लिया, तो मैं हो रही थीगिरफ सबसे छोटा पथ उदाहरण क्लास नॉटफाउंड अपवाद
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.test.giraph.Test$SimpleShortestPathsVertexInputFormat
तब मैं भीतरी वर्गों (SimpleShortestPathsVertexInputFormat और SimpleShortestPathsVertexOutputFormat) फ़ाइलों को अलग करता है चले गए और उन्हें (SimpleShortestPathsVertexInputFormat_v2, SimpleShortestPathsVertexOutputFormat_v2) सिर्फ मामले में नाम दिया गया है; कक्षा स्थिर नहीं हैं। इसने SimpleShortestPathsVertexInputFormat_v2 के लिए क्लास के मुद्दों को हल नहीं किया है, हालांकि मुझे अभी भी SimpleShortestPathsVertexOutputFormat_v2 के लिए एक ही त्रुटि मिल रही है। नीचे मेरा स्टैक ट्रेस है।
INFO mapred.JobClient: Running job: job_201205221101_0003
INFO mapred.JobClient: map 0% reduce 0%
INFO mapred.JobClient: Task Id : attempt_201205221101_0003_m_000005_0, Status : FAILED
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.test.giraph.utils.SimpleShortestPathsVertexOutputFormat_v2
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:898)
at org.apache.giraph.graph.BspUtils.getVertexOutputFormatClass(BspUtils.java:134)
at org.apache.giraph.bsp.BspOutputFormat.getOutputCommitter(BspOutputFormat.java:56)
at org.apache.hadoop.mapred.Task.initialize(Task.java:490)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:352)
at org.apache.hadoop.mapred.Child$4.run(Child.java:259)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
at org.apache.hadoop.mapred.Child.main(Child.java:253)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.test.giraph.utils.SimpleShortestPathsVertexOutputFormat_v2
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:866)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:890)
... 9 more
मैंने अपने नौकरी जार का निरीक्षण किया है और सभी वर्ग वहां हैं। इसके अलावा मैं एक छद्म वितरित मोड में हैडऑप 0.20.203 का उपयोग कर रहा हूं। जिस तरह से मैं अपना काम लॉन्च करता हूं वह नीचे प्रस्तुत किया जाता है।
hadoop jar giraphJobs.jar org.test.giraph.Test -libjars /path/to/giraph-0.2-SNAPSHOT-jar-with-dependencies.jar /path/to/input /path/to/output 0 3
इसके अलावा, मैं giraph के लिए HADOOP_CLASSPATH परिभाषित किया है - * - dependencies.jar। मैं बिना किसी समस्या के पेजरैंकबेंचमार्क उदाहरण चला सकता हूं (सीधे जिराफ - * - निर्भरता.जर से), और शॉर्ट्स पथ उदाहरण भी काम करता है (सीधे giraph - * - dependencies.jar से भी)। अन्य हडूप नौकरियां किसी समस्या के बिना काम करती हैं (कहीं मैंने परीक्षण करने के लिए पढ़ा है कि मेरा "क्लस्टर" सही तरीके से काम करता है)। क्या कोई भी इसी तरह की समस्या में आया है? किसी भी तरह की सहायता को आभार समझेंगे।
समाधान (खेद इस तरह यह पोस्ट करने के लिए, लेकिन मैं अधिक कुछ घंटों के लिए अपने ही सवाल का जवाब नहीं कर सकते हैं)
इस मुद्दे मैं अपने नौकरी जार जोड़ने के लिए किया था हल करने के लिए -लिब्बार्स (जहां बनाया गया है HADOOP_CLASSPATH में कोई परिवर्तन नहीं)। नौकरी लॉन्च करने का आदेश अब ऐसा दिखता है।
hadoop jar giraphJobs.jar org.test.giraph.Test -libjars /path/to/giraph-0.2-SNAPSHOT-jar-with-dependencies.jar,/path/to/job.jar /path/to/input /path/to/output 0 3
जारों की सूची को अल्पविराम से अलग किया जाना चाहिए। हालांकि इसने मेरी समस्या हल कर दी है। मैं अभी भी उत्सुक हूं कि मुझे अपना नौकरी जार "क्लासपाथ" पैरामीटर के रूप में क्यों पास करना है? क्या कोई मुझे समझा सकता है कि इसके पीछे तर्कसंगत क्या है? जैसा कि मैंने इसे अपने नौकरी जार का आह्वान करने के लिए अजीब (कम से कम कहने के लिए) पाया और फिर इसे "क्लासपाथ" जार के रूप में फिर से पास कर दिया। मैं स्पष्टीकरण के बारे में वास्तव में उत्सुक हूँ।