[java] 하둡“플랫폼에 기본 하둡 라이브러리를로드 할 수 없습니다”경고

현재 CentOs를 실행하는 서버에서 hadoop을 구성하고 있습니다 . 내가 실행하는 경우 start-dfs.sh또는 stop-dfs.sh, 나는 다음과 같은 오류가 발생합니다 :

WARN util.NativeCodeLoader : 해당되는 경우 내장 Java 클래스를 사용하여 플랫폼에 대한 기본 하둡 라이브러리를로드 할 수 없습니다.

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

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

그러나 /native/hadoop 2.x 의 디렉토리 내용 이 다르기 때문에 어떻게 해야할지 모르겠습니다.

또한이 두 가지 환경 변수를 추가했습니다 hadoop-env.sh:

export HADOOP_OPTS = “$ HADOOP_OPTS -Djava.library.path = / usr / local / hadoop / lib /”

HADOOP_COMMON_LIB_NATIVE_DIR = “/ usr / local / hadoop / lib / native /”내보내기

어떤 아이디어?



답변

64 비트 CentOS에서 Hadoop을 실행한다고 가정합니다. 경고가 네이티브 Hadoop 라이브러리이기 때문에 $HADOOP_HOME/lib/native/libhadoop.so.1.0.0실제로 32 비트로 컴파일 되었기 때문입니다.

어쨌든 이것은 단지 경고 일 뿐이며 하둡의 기능에는 영향을 미치지 않습니다.

이 경고를 없애고 Hadoop의 소스 코드를 다운로드하여 libhadoop.so.1.0.064 비트 시스템에서 다시 컴파일 한 다음 32 비트를 교체 하는 방법은 다음과 같습니다 .

소스 코드를 다시 컴파일하는 방법에 대한 단계는 Ubuntu에 포함되어 있습니다.

행운을 빕니다.


답변

다음 과 같이 기본 단어를 추가 HADOOP_OPTS하십시오.

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

PS : 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)

그래서 교훈은 배웠습니다. 어쨌든, 나머지는 적어도 경고를 억제 할 수있게했습니다. 그래서 나는 HADOOP_OPTS 환경 변수를 사용하여 라이브러리 경로를 제공하기 위해 다른 답변에서 권장되는 모든 것을 사용할 수 없었습니다. 소스 코드를 보았습니다. 오류를 생성하는 모듈은 힌트를 알려줍니다 ( util.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)

어떤 GLIBC 버전이 있습니까? 알아내는 간단한 방법은 다음과 같습니다.

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

따라서 OS를 2.14로 업데이트 할 수 없습니다. 유일한 해결책은 내 OS의 소스에서 기본 라이브러리를 작성하거나 경고를 억제하고 지금은 무시하는 것입니다. 나는 지금 당장 귀찮은 경고를 억제하기로 선택했지만 (나중에 소스에서 빌드 할 계획이라면) 디버그 메시지를 얻는 데 사용한 것과 동일한 로깅 옵션을 사용하여 구매하십시오. 지금은 예외입니다.

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"


답변

필자의 경우 64 비트 Linux 민트 OS에서 hadoop을 빌드 한 후의 기본 라이브러리를 교체했습니다 hadoop/lib. 여전히 문제가 지속됩니다. 그런 다음을 가리 키지 hadoop/lib않는 hadoop을 알아 냈습니다 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 * ../

건배