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




linux hadoop2 (16)

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

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

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

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

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

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


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

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

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


होडोप के साथ ओएसएक्स पर उन लोगों के लिए होमब्री के माध्यम से स्थापित, पथ और हडोप संस्करण को बदलने के लिए इन चरणों का पालन करें जहां उचित हो

wget http://www.eu.apache.org/dist/hadoop/common/hadoop-2.7.1/hadoop-2.7.1-src.tar.gz
tar xvf hadoop-2.7.1-src.tar.gz
cd hadoop-2.7.1-src
mvn package -Pdist,native -DskipTests -Dtar
mv lib /usr/local/Cellar/hadoop/2.7.1/

फिर withoop-env.sh अद्यतन करें

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc= -Djava.library.path=/usr/local/Cellar/hadoop/2.7.1/lib/native"

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

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"

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


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

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

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


मुझे लगता है कि आप 64 बिट CentOS पर हैडोप चला रहे हैं। कारण आपने देखा कि चेतावनी मूल $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 लाइब्रेरी $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 वास्तव में 32 बिट पर संकलित की गई थी।

वैसे भी, यह सिर्फ एक चेतावनी है, और हैडोप की कार्यक्षमताओं को प्रभावित नहीं करेगा।

अगर आप इस चेतावनी को खत्म करना चाहते हैं, तो libhadoop.so.1.0.0 के स्रोत कोड को डाउनलोड करें और 64 बिट सिस्टम पर libhadoop.so.1.0.0 को फिर से libhadoop.so.1.0.0 , फिर 32 बिट एक को प्रतिस्थापित करें।

स्रोत कोड को पुन: कंपाइल करने के तरीके यहां उबंटू के लिए शामिल हैं:

सौभाग्य।


सबसे पहले: आप 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"

पिछली पोस्टिंग से सत्यापित उपाय:

1) जांच की गई है कि libhadoop.so.1.0.0 वितरण के साथ भेजा गया libhadoop.so.1.0.0 मेरे मशीन आर्किटेक्चर के लिए संकलित किया गया था, जो x86_64 है:

[nova]:file /opt/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0
/opt/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3a80422c78d708c9a1666c1a8edd23676ed77dbb, not stripped

2) जोड़ा -Djava.library.path=<path> HADOOP_OPT में hadoop-env.sh :

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"

यह वास्तव में कष्टप्रद चेतावनी गायब हो गया।


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

[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 * ../

चियर्स


मैं CentOS का उपयोग नहीं कर रहा हूँ। उबंटू 16.04.2, हैडूप-2.7.3, जेडीके 1.8.0_121 में मेरे पास यही है। स्टार्ट- dfs.sh या stop-dfs.sh सफलतापूर्वक w / o त्रुटि चलाएं:

# JAVA env
#
export JAVA_HOME=/j01/sys/jdk
export JRE_HOME=/j01/sys/jdk/jre

export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}:.

# HADOOP env
#
export HADOOP_HOME=/j01/srv/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

अपने संस्थापन पथ के साथ / j01 / sys / jdk, / j01 / srv / hadoop बदलें

मैंने उबंटू पर एक बार सेटअप के लिए निम्नलिखित भी किया, जो start-dfs.sh चलाते समय कई बार पासवर्ड दर्ज करने की आवश्यकता को समाप्त करता है:

sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id [email protected]

उपयोगकर्ता को अपने उपयोगकर्ता नाम से बदलें


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


जवाब निर्भर करता है ... मैंने अभी 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

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