2010-08-09 10 views
8

मैं फ्लाई पर मैपर और रेड्यूसर कक्षाएं उत्पन्न करने के लिए क्लोजर में जेआईटी संकलन का उपयोग करने की कोशिश कर रहा हूं। हालांकि, इन वर्गों JobClient (यह सामान्य ClassNotFoundException है।)हाडोप की रनजर विधि नोड्स में कक्षा/जार फ़ाइलों को कैसे वितरित करती है?

मैं मैपर, प्रसारण और उपकरण संकलन, और RunJar का उपयोग कर काम चलाने AOT हैं, तो सब कुछ ठीक लग रहा है द्वारा मान्यता प्राप्त नहीं किया जा रहा। source के माध्यम से देखने के बाद, ऐसा लगता है कि यह जार को अनपॅक कर रहा है और एक कस्टम URLClassLoader बना रहा है जो इसे "मुख्य" कार्यान्वयन को लोड करने के लिए उपयोग करता है। जो मैं नहीं देख रहा हूं वह यह है कि जार को नोड्स में कैसे वितरित किया जाता है या यहां तक ​​कि यह एक-नोड क्लस्टर में कैसे उपयोग किया जा रहा है।

किसी भी मदद की बहुत सराहना की जाएगी!

उत्तर

2

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

मेरे अनुभव में मैं इन समस्याओं को दूर नहीं कर सकता है और इसलिए, उदाहरण के लिए, BeanShell के साथ, मैं classloader विकल्पों का उपयोग कर बंद करो और कमांड लाइन है कि JVM शुरू होता है पर अपने पूरे classpath निर्दिष्ट करने के लिए किया था। इस तरह से मुझे पता था कि स्क्रिप्ट डिफ़ॉल्ट क्लासलोडर का इस्तेमाल करती है और सभी वर्ग पाए जाएंगे।

एक अन्य उदाहरण के साथ:

वर्गों/ग्रूवी/A.groovy

वर्गों/ग्रूवी/B.groovy

public class A { 
    public A() { 
     B b = new B() 
    } 
} 

GroovyClassLoader ग्रूवी वर्ग बी लोड नहीं होगा इस प्रकार की चीज को क्लासफॉरनाम के साथ एक कस्टम क्लासलोडर (डिफ़ॉल्ट क्लासलोडर नहीं) के साथ जेडीबीसी ड्राइवर लोड करने का प्रयास भी किया जा सकता है।

4

सबसे पहले जब हम नौकरी के जार जमा करते हैं तो यह जॉबट्रैकर द्वारा गुणों में कॉन्फ़िगर की गई निर्देशिका को कॉपी करने के लिए कॉपी किया जाता है। और जब एक टास्कट्रैक को नौकरी सौंपी जाती है (शेड्यूलर ऑफसी द्वारा) यह स्टेजिंग निर्देशिका और निष्पादन से प्रतिलिपि बनाता है।

अगर आप निष्पादन के लिए बाहरी जार देना चाहते हैं तो आप हडोप की वितरित कैश सुविधा के साथ ऐसा कर सकते हैं।

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