java - Hadoop "आपके प्लेटफ़ॉर्म के लिए देशी-हडूप लाइब्रेरी लोड करने में असमर्थ" चेतावनी




linux hadoop2 (14)

@zhutoulala - FWIW आपके लिंक ने मेरे लिए हाडोप 2.4.0 के साथ एक अपवाद के साथ काम किया, मुझे मैवेड को जवाडॉक्स बनाने के लिए नहीं बताया था। मैंने 2.4.0 के पहले लिंक में पैच का भी उपयोग किया और यह ठीक काम किया। यहां मेवेन कमांड है जिसे मुझे जारी करना था

mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar

इसे बनाने और पुस्तकालयों को स्थानांतरित करने के बाद, hadoop-env.sh को अपडेट करना न भूलें :)

सोचा था कि यह किसी ऐसे व्यक्ति की मदद कर सकता है जो मेरे जैसे ही रोडब्लॉक में भाग गया

मैं वर्तमान में Cento चलाने वाले सर्वर पर हैडूप कॉन्फ़िगर कर रहा हूं । जब मैं start-dfs.sh या stop-dfs.sh , तो मुझे निम्न त्रुटि मिलती है:

WARN उपयोग। नेटकोडलोडर: आपके प्लेटफ़ॉर्म के लिए देशी-हडूप लाइब्रेरी लोड करने में असमर्थ ... जहां लागू अंतर्निहित जावा क्लास का उपयोग करना

मैं हडोप 2.2.0 चला रहा हूँ

ऑनलाइन खोज करने से इस लिंक को लाया गया: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html

हालांकि, hadoop 2.x पर /native/ निर्देशिका की सामग्री अलग दिखाई देती है इसलिए मुझे यकीन नहीं है कि क्या करना है।

मैंने hadoop-env.sh में इन दो पर्यावरण चर भी जोड़े हैं:

निर्यात HADOOP_OPTS = "$ HADOOP_OPTS -Djava.library.path = / usr / local / hadoop / lib /"

निर्यात HADOOP_COMMON_LIB_NATIVE_DIR = "/ usr / local / hadoop / lib / native /"

कोई विचार?


@zhutoulala के अलावा स्वीकार्य उत्तर के अलावा, यह एआरएमएचएफ प्लेटफार्मों (रास्पबेरी पी 3 मॉडल बी) पर नवीनतम स्थिर संस्करण (2.8) के साथ काम करने के लिए एक अद्यतन है। सबसे पहले मैं पुष्टि कर सकता हूं कि आपको मूल पुस्तकालयों को 64 बिट एआरएम में दोबारा जोड़ना होगा, कुछ पर्यावरण चर सेट करने के आधार पर यहां अन्य उत्तरों काम नहीं करेंगे। जैसा कि हैडोप दस्तावेज में दर्शाया गया है, पूर्व निर्मित देशी पुस्तकालय 32 बिट हैं।

मुट्ठी लिंक में दिए गए उच्च स्तरीय कदम ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) सही हैं। इस यूआरएल पर http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/ आपको रास्पबेरी पीआई के लिए विशिष्ट विवरण मिलते हैं, लेकिन हैडोप संस्करण 2.8 के लिए नहीं।

यहां मेरे संकेत हैंडोप 2.8 डालें:

  • नवीनतम रास्पियन पर अभी भी कोई प्रोटोबफ पैकेज नहीं है, इसलिए आपको इसे स्वयं संकलित करना होगा और संस्करण बिल्कुल प्रोटोबफ 2.5 होना चाहिए ( https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz )
  • सीएमके फ़ाइल पैचिंग विधि बदला जाना चाहिए। अधिक प्लग, पैच करने के लिए फ़ाइलें समान नहीं हैं। दुर्भाग्य से, जेआईआरए पर 2.8 के लिए विशिष्ट स्वीकार्य पैच नहीं है। इस यूआरएल पर ( https://issues.apache.org/jira/browse/HADOOP-9320 ) आपको अपने नामनोड पर एंड्रियास म्यूटशेलेर प्रस्तावित पैच कॉपी और पेस्ट करना होगा:

    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ touch HADOOP-9320-v2.8.patch
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ vim HADOOP-9320-v2.8.patch
    #copy and paste proposed patch given here : https://issues.apache.org/jira/browse/HADOOP-9320?focusedCommentId=16018862&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16018862
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ patch < HADOOP-9320-v2.8.patch
    patching file HadoopCommon.cmake
    patching file HadoopJNI.cmake
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ cd ../..
    :hadoop-2.8.0-src $ sudo mvn package -Pdist,native -DskipTests -Dtar
    

एक बार निर्माण सफल हो गया है:

    :hadoop-2.8.0-src/hadoop-dist/target/hadoop-2.8.0/lib/native $ tar -cvf nativelibs.tar *

और इस संग्रह की सामग्री के साथ अपने हडोप इंस्टॉल की lib / मूल निर्देशिका की सामग्री को प्रतिस्थापित करें। हाडोप चलाने पर चेतावनी संदेश गायब होना चाहिए।


कोटीआई द्वारा सुझाए गए निरंतर शोध के बाद इस मुद्दे को हल किया गया।

[email protected]:~$ cd /usr/local/hadoop

[email protected]:/usr/local/hadoop$ ls

bin  include  libexec      logs        README.txt  share
etc  lib      LICENSE.txt  NOTICE.txt  sbin

[email protected]:/usr/local/hadoop$ cd lib

[email protected]:/usr/local/hadoop/lib$ ls
native

[email protected]:/usr/local/hadoop/lib$ cd native/

[email protected]:/usr/local/hadoop/lib/native$ ls

libhadoop.a       libhadoop.so        libhadooputils.a  libhdfs.so
libhadooppipes.a  libhadoop.so.1.0.0  libhdfs.a         libhdfs.so.0.0.0

[email protected]:/usr/local/hadoop/lib/native$ sudo mv * ../

चियर्स


जवाब निर्भर करता है ... मैंने अभी 64-बिट CentOS 6.6 पर टैरबॉल से हैडोप 2.6 स्थापित किया है। हडोप इंस्टॉलेशन वास्तव में प्री -बिल्ट 64-बिट देशी लाइब्रेरी के साथ आया था। मेरे इंस्टॉल के लिए, यह यहां है:

/opt/hadoop/lib/native/libhadoop.so.1.0.0

और मुझे पता है कि यह 64-बिट है:

[[email protected] native]$ ldd libhadoop.so.1.0.0
./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
linux-vdso.so.1 =>  (0x00007fff43510000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f9be553a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f9be51a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9be5966000)

दुर्भाग्यवश, मैंने चेहरे पर मुझे देखकर सही जवाब को अनदेखा कर दिया क्योंकि मैं इस पर ध्यान केंद्रित कर रहा था, "क्या यह पुस्तकालय 32 पीआर 64 बिट है?":

`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)

तो, सबक सीखा। वैसे भी, बाकी ने मुझे कम से कम चेतावनी को दबाने में सक्षम होने का नेतृत्व किया। तो मैंने HADOOP_OPTS पर्यावरण परिवर्तक का उपयोग करके लाइब्रेरी पथ प्रदान करने के लिए अन्य उत्तरों में अनुशंसित सबकुछ जारी रखा और कोई फायदा नहीं हुआ। तो मैंने सोर्स कोड देखा। त्रुटि उत्पन्न करने वाला मॉड्यूल आपको संकेत देता है ( ut.NativeCodeLoader ):

15/06/18 18:59:23 WARN util.NativeCodeLoader: Unable to load native-hadoop    library for your platform... using builtin-java classes where applicable

तो, यह देखने के लिए यहां क्या करें:

http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/

आह, कुछ डीबग स्तर लॉगिंग है - आइए देखते हैं कि हमें कुछ अतिरिक्त सहायता मिलती है या नहीं। निम्न पंक्ति को $ HADOOP_CONF_DIR / log4j.properties फ़ाइल में जोड़कर किया जाता है:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

तब मैंने एक आदेश चलाया जो मूल चेतावनी उत्पन्न करता है, जैसे stop-dfs.sh, और यह गुडिया मिला:

15/06/18 19:05:19 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /opt/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/hadoop/lib/native/libhadoop.so.1.0.0)

और उत्तर डीबग संदेश के इस स्निपेट में प्रकट होता है (वही बात जो पिछले ldd कमांड ने मुझे बताने की कोशिश की:

`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)

मेरे पास जीएलबीबीसी का कौन सा संस्करण है? यहां खोजने के लिए सरल चाल है:

[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12

तो, मेरे ओएस को 2.14 में अपडेट नहीं किया जा सकता है। केवल ओएस पर स्रोतों से मूल पुस्तकालयों का निर्माण करना या चेतावनी को दबा देना और अभी इसे अनदेखा करना है। मैंने अभी के लिए कष्टप्रद चेतावनी को दबाने का विकल्प चुना है (लेकिन भविष्य में स्रोतों से निर्माण करने की योजना बनाते हैं) उसी लॉगिंग विकल्पों का उपयोग करके खरीदते हैं जिन्हें हम डिबग संदेश प्राप्त करते थे, सिवाय इसके कि, इसे केवल त्रुटि स्तर बनाएं।

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

मुझे आशा है कि इससे दूसरों को यह देखने में मदद मिलेगी कि ओपन सोर्स सॉफ्टवेयर का एक बड़ा लाभ यह है कि यदि आप कुछ सरल तार्किक कदम उठाते हैं तो आप इस सामान को समझ सकते हैं।


बस अपने HADOOP_OPTS मूल निवासी को इस तरह जोड़ें:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

पीएस: धन्यवाद Searene


मुझे जेडीके 6 के साथ एक ही समस्या थी, मैंने जेडीके को जेडीके 8 में बदल दिया, समस्या हल हो गई। जेडीके 8 का उपयोग करने की कोशिश करो !!!


मेरी भी यही समस्या थी। यह .bashrc में निम्नलिखित पंक्तियों को जोड़कर हल किया गया है:

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

मेरे मामले में, मैंने अपने 64 बिट लिनक्स टकसाल ओएस पर हैडऑप बनाने के बाद, मैंने मूल पुस्तकालय को hadoop/lib में बदल दिया। फिर भी समस्या बनी रहती है। तब मैंने hadoop/lib/native लिए hadoop/lib को इंगित करने वाले hadoop/lib को समझ लिया। तो मैंने बस मूल सामग्री से मूल सामग्री में सभी सामग्री ले जाया। और चेतावनी अभी चली गई।


यह भी काम करेगा:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native

यह रेखा यहां ठीक है:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

KunBetter के जवाब से पैसा कहाँ है


सबसे पहले: आप glibc संस्करण को संशोधित कर सकते हैं। कंटोस सुरक्षित सॉफ्टवेयर प्रदान करता है, इसका मतलब यह भी है कि संस्करण पुराना है जैसे glibc, protobuf ...

ldd --version
ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0

आप आवश्यक glibc के साथ वर्तमान glibc के संस्करण की तुलना कर सकते हैं।

दूसरा: यदि वर्तमान ग्लिब का संस्करण पुराना है, तो आप glibc को अपडेट कर सकते हैं। डाउनलोड ग्लेबैक

यदि वर्तमान glibc आईडी का संस्करण सही है, तो आप अपने HADOOP_OPTS पर देशी शब्द जोड़ सकते हैं

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

हडोप स्थापित करने के लिए क्लूडेरा से मुफ्त संस्करण स्थापित करना बहुत आसान है। यह एक अच्छा जीयूआई के साथ आता है जो नोड्स को जोड़ने में आसान बनाता है, निर्भरता के साथ कोई संकलन या भरना नहीं है, यह हाइव, सुअर इत्यादि जैसी चीजों के साथ आता है।

http://www.cloudera.com/content/support/en/downloads.html

चरण हैं: 1) डाउनलोड 2) इसे चलाएं 3) वेब जीयूआई (1.2.3.4:7180) पर जाएं 4) वेब गुई में अतिरिक्त नोड्स जोड़ें (अन्य नोड्स पर क्लौडेरा सॉफ़्टवेयर इंस्टॉल न करें, यह आपके लिए यह सब करता है) 5) वेब के भीतर जीयूआई होम पर जाएं, ह्यू और ह्यू वेब यूआई पर क्लिक करें। यह आपको हाइव, पिग, स्क्वाप इत्यादि तक पहुंच प्रदान करता है।


export HADOOP_HOME=/home/hadoop/hadoop-2.4.1  
export PATH=$HADOOP_HOME/bin:$PATH  
export HADOOP_PREFIX=$HADOOP_HOME  
export HADOOP_COMMON_HOME=$HADOOP_PREFIX  
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native  
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop  
export HADOOP_HDFS_HOME=$HADOOP_PREFIX  
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX  
export HADOOP_YARN_HOME=$HADOOP_PREFIX  
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

export JAVA_HOME=/home/hadoop/software/java/jdk1.7.0_80
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"