압축만 홀랑 풀면 설치되는 hadoop 배포판에 포함된 기본 제공 네이티브 라이브러리는 32비트 리눅스 기준이므로,

64비트에서 뭔가 실행하면 아래와 같은 경고 메세지가 출력됨.


WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable




네이티브 라이브러리를 체크해보면 아래처럼 전부 false로 나올 것임.

(원래 hadoop이 설치된 디렉토리는 $HADOOP_HOME 이라고 가정함.)

[root@localhost]# $HADOOP_HOME/bin/hadoop checknative

15/03/17 11:36:00 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Native library checking:

hadoop:  false 

zlib:    false 

snappy:  false 

lz4:     false 

bzip2:   false 

openssl: false 

15/03/17 11:36:01 INFO util.ExitUtil: Exiting with status 1




64비트에 맞는 네이티브 라이브러리를 사용하려면 따로 hadoop 소스를 받아서 빌드해야 함.








준비물

JDK

설치여부를 확인해보고 없으면 환경에 맞게 openjdk, openjdk-devel 설치.

yum install java-1.8.0-openjdk.x86_64

yum install java-1.8.0-openjdk-devel.x86_64



Protocol Buffers

https://github.com/google/protobuf


- 다운로드

버전간 호환이 안되므로 반드시 2.5.0으로 설치해야 함.

wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz


- 설치

./configure --prefix=/usr

(prefix 없이 설치하면 /usr/local 아래에 설치되는데 LD_LIBRARY_PATH에 /usr/local/lib가 등록되어 있지 않으면 제대로 동작을 안함. 굳이 prefix 없이 설치하려면 /etc/ld.so.conf 파일에 /usr/local/lib가 있는지 확인하고 없으면 넣어준 다음 ldconfig 명령어로 갱신해 줄 것)


make

make check (이게 실패하면 잠재적으로 문제가 된다니 한 번 확인해 볼 것)

make install


- 설치확인

protoc --version




Snappy

https://code.google.com/p/snappy


- 다운로드

wget https://snappy.googlecode.com/files/snappy-1.1.1.tar.gz


- 설치

./configure --prefix=/usr

make

make install





기타 빌드에 필요한 것들


설치여부를 확인하고 설치해 줄 것.

centos 라면 yum install 해주면 됨.

참조: http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/NativeLibraries.html#Build

gcc, gcc-c++, cmake

autoconf, automake, libtool

zlib, zlib-devel,

bzip2, bzip2-devel

openssl, openssl-devel




Maven

http://maven.apache.org


- 다운로드

wget http://mirror.apache-kr.org/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.tar.gz


- 설치

  - 압축해제. 압축해제 후 나온 디렉토리를 $MAVEN_HOME 이라고 가정.

  - 압축해제 후$MAVEN_HOME/bin 디렉토리를 PATH에 추가.

    ex) /etc/profile이나 ~/.bash_profile 열어서 PATH=$PATH:~~~ 뒷부분에 :$MAVEN_HOME/bin 추가


- 설치확인

mvn --version








Hadoop 소스 빌드


- 다운로드

wget http://mirror.apache-kr.org/hadoop/common/hadoop-2.6.0/hadoop-2.6.0-src.tar.gz


- 빌드

  - 압축해제. 압축해제 후 나온 디렉토리를 $HADOOP_SRC_HOME 이라고 가정.

  - $HADOOP_SRC_HOME으로 이동한 후 아래 명령어 실행 

mvn package -Pdist,native -DskipTests -Dtar -Dmaven.javadoc.skip=true -Dsnappy.prefix=$HADOOP_HOME/snappy -Drequire.snappy=true





컴파일 된 네이티브 라이브러리 복사


// 원본백업

[root@localhost]# mv $HADOOP_HOME/lib/native{,_old}

// 컴파일 된 네이티브 라이브러리 복사

[root@localhost]# cp -r $HADOOP_SRC_HOME/hadoop-dist/target/hadoop-2.6.0/lib/native $HADOOP_HOME/lib


// libsnappy 복사

[root@localhost]# cp /usr/lib/libsnappy.* $HADOOP_HOME/lib/native






빌드한 네이티브 라이브러리가 제대로 적용되었는지 체크.


[root@localhost]# $HADOOP_HOME/bin/hadoop checknative

15/03/17 13:02:22 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native

15/03/17 13:02:22 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library

Native library checking:

hadoop:  true $HADOOP_HOME/lib/native/libhadoop.so.1.0.0

zlib:    true /usr/lib64/libz.so.1

snappy:  true $HADOOP_HOME/lib/native/libsnappy.so.1 

lz4:     true revision:99

bzip2:   true /usr/lib64/libbz2.so.1

openssl: true /usr/lib64/libcrypto.so




이제 hadoop 관련 뭔가 실행해도 native library 관련 경고 메세지가 나오지 않음.










저작자 표시
신고
Posted by bloodguy

댓글을 달아 주세요

  1. an0nymax 2016.01.12 14:01 신고  댓글주소  수정/삭제  댓글쓰기

    정말 정리를 잘 해주셨네요.

    native library 오류로 인해 고민이 많았는데, 깔끔하게 해결이 되었습니다.
    정말 감사합니다.

  2. smlee 2017.04.04 17:00 신고  댓글주소  수정/삭제  댓글쓰기

    많은 도움이 되었습니다. 감사합니다.
    저 같은 경우는 포스팅된 방식대로 진행했었는데 bzip2만 false가 떠서
    bzip2-devel을 설치했습니다.(bzip2은 설치가 되어있는데 bzip2-devel 이 설치 안되있어서 false 가 떴었던 상황)
    기타 빌드에 필요한것들에 bzip2, bzip2-devel을 추가하신다면 어떠실지 궁금합니다.

  3. Arone 2017.07.23 23:07 신고  댓글주소  수정/삭제  댓글쓰기

    항상 좋은글 잘 보고 갑니다 ㅎㅎㅎ



티스토리 툴바