2012-10-17 30 views
7

यह प्रश्न श्रमिकों के उपयोग के लिए पूरे क्लस्टर में जार वितरित करने का संदर्भ नहीं देता है।हैडोप HADOOP_CLASSPATH मुद्दे

यह क्लाइंट मशीन पर कई अतिरिक्त पुस्तकालयों को निर्दिष्ट करने के लिए संदर्भित करता है। अधिक विशिष्ट होना करने के लिए: मैं आदेश में एक SequenceFile की सामग्री को पुनः प्राप्त करने में निम्न आदेश को चलाने के लिए कोशिश कर रहा हूँ:

/path/to/hadoop/script fs -text /path/in/HDFS/to/my/file 

यह मुझे इस त्रुटि फेंकता है: text: java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable

मैं एक लिखने योग्य DoubleArrayWritable बुलाया वर्ग की है। वास्तव में, एक और कंप्यूटर पर सब ठीक काम करता है।

मैंने उस श्रेणी वाले जार को शामिल करने के लिए HADOOP_CLASSPATH सेट करने का प्रयास किया लेकिन बिना किसी परिणाम के। वास्तव में, जब चल रहा है:

/path/to/hadoop/script classpath 

परिणाम जार जो मैं HADOOP_CLASSPATH को जोड़ा गया शामिल नहीं है।

सवाल यह है:

: जब Hadoop

कुछ अधिक जानकारी जो मदद कर सकता है (लोगों को जो Hadoop स्क्रिप्ट classpath में स्वचालित रूप से शामिल की तुलना में अतिरिक्त अर्थ अन्य पुस्तकालयों से) चल रहा है कि कैसे आप अतिरिक्त पुस्तकालयों निर्दिष्ट करूँ

  • मैं hadoop.sh स्क्रिप्ट (और न ही किसी भी संबद्ध स्क्रिप्ट)
  • मैं Hadoop स्थापना निर्देशिका
  • के तहत/lib निर्देशिका करने के लिए अपने पुस्तकालय कॉपी नहीं कर सकते hadoop-env.sh में बदल नहीं सकते हैं आरयू है n hadoop.sh से n यह लाइन है: export HADOOP_CLASSPATH=$HADOOP_HOME/lib जो शायद बताती है कि क्यों मेरे HADOOP_CLASSPATH env var को अनदेखा किया जाता है।

उत्तर

13

आप स्थापित करने के लिए HADOOP_CLASSPATH तो

export HADOOP_CLASSPATH=/path/to/jar/myjar.jar:$HADOOP_CLASSPATH; \ 
    hadoop fs -text /path/in/HDFS/to/my/file 

काम करेगा अनुमति दी जाती है। आपके मामले में चूंकि यह चर hadoop-env.sh में ओवरराइड की गई है इसलिए, बजाय -libjars विकल्प का उपयोग करने पर विचार करें: डिफ़ॉल्ट CLASSPATH चर में अपने जार फ़ाइल जोड़ने के लिए

java -cp $HADOOP_HOME/lib/*:/path/to/jar/myjar.jar:$CLASSPATH \ 
org.apache.hadoop.fs.FsShell -conf $HADOOP_HOME/conf/core-site.xml \ 
-text /path/in/HDFS/to/my/file 
+0

हाँ लेकिन Hadoop स्क्रिप्ट इस करता है: निर्यात HADOOP_CLASSPATH = $ HADOOP_HOME/lib। यह मेरे HADOOP_CLASSPATH – Razvan

+0

@Razvan को मेरे अपडेट किए गए उत्तर –

+0

को फिर से लिखता है जैसा कि मैंने कहा था, मैं "वितरित" क्लासपाथ सेट नहीं करना चाहता हूं। मैं क्लाइंट मशीन – Razvan

0

प्रयास करें:

hadoop fs -libjars /path/to/jar/myjar.jar -text /path/in/HDFS/to/my/file 

वैकल्पिक रूप से मैन्युअल रूप से FsShell आह्वान और इसमें HADOOP_CLASSPATH भी संलग्न करें। फिर अपना आदेश निष्पादित करें।

export CLASSPATH=/your/jar/file/myjar.jar:$CLASSPATH:$HADOOP_CLASSPATH /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file

+3

डिफ़ॉल्ट क्लासपाथ var को हडूप द्वारा अनदेखा किया जाता है – Razvan

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

  • कोई संबंधित समस्या नहीं^_^