source

Hadoop "플랫폼에 네이티브 하둡 라이브러리를 로드할 수 없습니다" 경고

factcode 2022. 8. 18. 23:25
반응형

Hadoop "플랫폼에 네이티브 하둡 라이브러리를 로드할 수 없습니다" 경고

현재 CentOs를 실행하는 서버에서 Hadoop을 구성하고 있습니다.내가 달릴 때start-dfs.sh ★★★★★★★★★★★★★★★★★」stop-dfs.sh 라고 하는 에러가 발생합니다.

WARN util.Native Code Loader:플랫폼에 대한 네이티브 하둡 라이브러리를 로드할 수 없습니다...필요에 따라 빌트인 클래스 사용

Hadoop 2.2.0을 실행하고 있습니다.

온라인으로 검색하면, 다음의 링크가 표시됩니다.http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html

,, 의의 /native/2.x 의 것 같기 하면 잘 모르겠습니다.hadoop 2.x 의 디렉토리입니다.

이 두 hadoop-env.sh:

hadoop_OPTS="$HAOP_OPTS -Djava.library.path=/usr/local/hadoop/lib/" 내보내기

HADOP_COMMON_LIB_ 내보내기NATIVE_DIR="/usr/local/hadoop/lib/native/"

좋은 생각 있어요?

CentOS64Cent에서입니다.OS 하둡 라이브러리입니다.$HADOOP_HOME/lib/native/libhadoop.so.1.0.032번

어쨌든, 이것은 경고일 뿐이며 Hadoop의 기능에 영향을 주지 않습니다.

컴파일하십시오.libhadoop.so.1.0.064비트 시스템에서 32비트 시스템을 교체합니다.

Ubuntu의 소스 코드를 다시 컴파일하는 방법은 다음과 같습니다.

행운을 빌어요.

자신의 고유 단어만 추가해 주세요.HADOOP_OPTS음음음같 뭇매하다

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

PS: Thank Searene(고맙습니다)

정답은...방금 64비트 CentOS 6.6의 tarball에서 Hadoop 2.6을 설치했습니다.실제로 Hadoop 설치에는 사전 구축된 64비트 네이티브 라이브러리가 포함되어 있었습니다.인스톨의 경우는, 다음과 같습니다.

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

64비트라는 것도 알고 있습니다.

[hadoop@VMWHADTEST01 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 pr 64비트에요?":

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

그래서 교훈을 얻었습니다.어쨌든, 나머지는 적어도 경고를 억제할 수 있도록 이끌어 주었다.그래서 저는 계속해서 다른 답변에서 권장하는 모든 작업을 수행하여 HADOP_OPTS 환경 변수를 사용하여 라이브러리 경로를 제공했지만 소용이 없었습니다.그래서 소스코드를 살펴봤습니다.에러를 생성하는 모듈이 힌트(util)를 알려줍니다.Native Code Loader) :

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/

아, 디버깅레벨 로깅이 몇 가지 있습니다.다른 도움말이 있는지 확인해 보겠습니다.이를 수행하려면 $HADOP_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)

어떤 버전의 GLIBC가 있나요?여기 간단한 요령이 있습니다.

[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12

OS를 2.14로 업데이트할 수 없습니다.유일한 해결책은 OS의 소스에서 네이티브 라이브러리를 구축하거나 경고를 무시하고 일단 무시하는 것입니다.지금은 귀찮은 경고만 억제하고(그러나 앞으로는 소스로부터 구축할 예정) 디버깅메시지를 받았을 때와 같은 로깅 옵션을 사용하여 구입하기로 했습니다.단, 지금은 ERROR 레벨로 해 주세요.

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

오픈 소스 소프트웨어의 큰 장점은 간단한 논리적인 단계를 밟으면 이 문제를 해결할 수 있다는 것입니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, , 하다, 하다, 하다, , 하다, 하다, 하다..bashrc:

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

후 Mint OS의 했습니다.hadoop/lib아직 문제가 발생., 하둡이 가리키고 있어요.hadoop/lib가 to까지는 hadoop/lib/native그래서 모든 콘텐츠를 네이티브 라이브러리에서 부모 라이브러리로 옮겼습니다.그리고 경고는 그냥 사라졌어요.

이 방법도 유효합니다.

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

Koti의 제안대로의 계속적인 조사 결과, 이 문제는 해결되었습니다.

hduser@ubuntu:~$ cd /usr/local/hadoop

hduser@ubuntu:/usr/local/hadoop$ ls

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

hduser@ubuntu:/usr/local/hadoop$ cd lib

hduser@ubuntu:/usr/local/hadoop/lib$ ls
native

hduser@ubuntu:/usr/local/hadoop/lib$ cd native/

hduser@ubuntu:/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

hduser@ubuntu:/usr/local/hadoop/lib/native$ sudo mv * ../

건배.

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"

Homebrew를 통해 Hadoop이 설치된 OSX의 경우 다음 단계에 따라 경로와 Hadoop 버전을 교체하십시오.

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/

다음으로 hadoop-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"

@zhutoulala--FWIW 당신의 링크가 하둡 2.4.0에서 작동했습니다만, 단 한 가지 예외는 자바독을 구축하지 말라고 maven에게 말했습니다.2.4.0의 첫 번째 링크의 패치도 사용했는데 정상적으로 동작했습니다.여기 내가 명령해야 했던 maven 명령어가 있다.

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

이 기능을 구축하고 라이브러리를 이동한 후에는 hadoop-env.sh을 업데이트하는 것을 잊지 마십시오.

이게 저와 같은 바리케이드에 부딪힌 사람에게 도움이 될 것 같아서요

을 「」로 합니다.$HADOOP_HOME/lib더입니니다다

다음 ..bashrc

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

에 있어야 합니다.$HADOOP_HOME/lib더입니니다다

그건 작동할 거야.

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_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

KunBetter의 답변에 따르면, 저를 위해 일했습니다..bashrc 파일에 추가하고 .bashrc 내용을 새로고침하기만 하면 됩니다.

$ source ~/.bashrc

이 행은 다음과 같습니다.

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

KunBetter의 답변은 돈이 어디에 있느냐입니다.

JDK6에서도 같은 문제가 있었습니다.JDK를 JDK8로 바꾸면 문제가 해결되었습니다.JDK8을 사용해 보세요!!!

@zhutoulala accepted answer에 덧붙여, ARMHF 플랫폼(Raspberry Pi 3 모델 B)의 최신 안정판(2.8)에서 동작하도록 하기 위한 업데이트를 실시합니다.먼저 네이티브 라이브러리를 64비트 ARM으로 재컴파일해야 한다는 것을 확인합니다.몇 가지 환경변수 설정에 기초한 다른 답변은 작동하지 않습니다.Hadoop 설명서에 나와 있듯이 사전 구축된 기본 라이브러리는 32비트입니다.

첫 번째 링크(http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html))에 기재되어 있는 개략적인 스텝이 정답입니다.이 URL http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/에서는 Rasberry Pi에 대한 자세한 내용을 볼 수 있지만 Hadoop 버전 2.8에 대한 자세한 내용은 볼 수 없습니다.

다음은 hadoop 2.8에 관한 지표입니다.

  • 최신 Raspbian에는 protobuf 패키지가 아직 없기 때문에 직접 컴파일해야 하며 버전도 protobuf 2.5여야 합니다(https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz)
  • CMake 파일 패치 방법을 변경해야 합니다.패치할 파일이 동일하지 않습니다.유감스럽게도 JIRA에는 2.8에 고유한 패치가 없습니다.다음 URL(https://issues.apache.org/jira/browse/HADOOP-9320)에서 Andreas Muttscheller가 제안한 패치를 복사하여 이름 노드에 붙여넣어야 합니다.

    :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 *

또한 Hadoop 설치의 lib/native 디렉터리의 컨텐츠를 이 아카이브의 컨텐츠로 바꿉니다.Hadoop 실행 시 경고 메시지가 사라집니다.

CentOS는 사용하지 않습니다.다음은 Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121에 있는 내용입니다.오류 없이 stop-dfs.sh 또는 stop-dfs.sh을 정상적으로 실행합니다.

# 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을 설치 경로로 바꿉니다.

또한 Ubuntu에서 1회 셋업을 실시하여 start-dfs 실행 시 패스워드를 여러 번 입력할 필요가 없어졌습니다.sh:

sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id user@localhost

사용자 이름을 사용자 이름으로 바꿉니다.

기본적으로 이는 오류가 아니라 Hadoop 클러스터의 경고입니다.여기에서는 환경변수를 갱신합니다.

hadoop_OPTS 내보내기 = "$HAOP_OPTS"-Djava.library.path = /usr/local/local/lib/lib
HADOP_COMMON_LIB_ 내보내기NATIVE_DIR = "/usr/local/filename/lib/filename"

답변은 @chromeeagle분석과 이 링크(Nan-Xiao)를 혼합한 것입니다.

다른 솔루션이 작동하지 않는 경우 다음 단계를 따르십시오.

  1. 을 합니다.$HADOOP_HOME/etc/hadoop/log4j.properties(@supereagle).이치노

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

  2. 스파크/파이스파크 쉘을 실행합니다.네이티브 라이브러리가 로드되지 않는 것에 관한 추가 로그 정보가 표시됩니다.제 경우 다음과 같은 오류가 있었습니다.

    Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: no hadoop in java.library.path

  3. 를 Hadoop에 합니다.LD_LIBRARY_PATH「 」 「 」 、 「 」

    export LD_LIBRARY_PATH="$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH"

이게 도움이 됐으면 좋겠다.몇 개의 HADOP 설치에서 이 문제가 발생했습니다. 두 가지 모두에서 작동했습니다.

이전 투고에서 해결 방법을 확인:

) 1) 인인,, the 1,libhadoop.so.1.0.0Hadoop 배포판과 함께 제공된 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_OPThadoop-env.sh:

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

이것은 정말로 짜증나는 경고를 사라지게 했다.

우선:glibc 버전은 변경할 수 있습니다.CentOS는 안전한 소프트웨어를 제공합니다.또한 glibc, protobuf 등의 오래된 버전도 의미합니다.

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

현재 glibc 버전을 필요한 glibc와 비교할 수 있습니다.

두 번째: 현재 glibc 버전이 오래된 경우 glibc를 업데이트할 수 있습니다.Glibc 다운로드

현재 glibc ID 버전이 올바른 경우 HADOP_OPTS에 네이티브 단어를 추가할 수 있습니다.

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

네이티브 하둡 라이브러리는 *nix 플랫폼에서만 지원됩니다.라이브러리는 Cygwin 또는 Mac OS X 플랫폼에서는 작동하지 않습니다.

참고 자료: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/NativeLibraries.html

Windows 또는 Mac OS X를 사용하는 경우 플랫폼을 *nix로 변경해야 합니다.

Hadoop을 설치하려면 Cloudera에서 무료 버전을 설치하는 것이 훨씬 쉽습니다.노드 추가가 간단하며 컴파일이나 의존관계가 없는 하이브, 피그 등의 기능이 탑재되어 있습니다.

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

순서: 1) 다운로드 2) 실행 3) 웹 GUI로 이동 (1.2.3.4:7180) 4) 웹 GUI에서 추가 노드 추가 (다른 노드에 cloudera 소프트웨어를 설치하지 마십시오.모든 것을 대신합니다) 5) 웹 GUI에서 [Hue]를 클릭하여 [Hue]을 클릭합니다.Hive, Pig, Sqoop 등에 접속할 수 있습니다.

언급URL : https://stackoverflow.com/questions/19943766/hadoop-unable-to-load-native-hadoop-library-for-your-platform-warning

반응형