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

    2018. 7. 24. 12:49

    by. 위지원

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


    ㅜ_ㅜ 이놈의 에러는 뭐 아주그냥 나의 베스트 프렌드~^.~


    http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/NativeLibraries.html 이거보면 native build 필요



    [root@cl3 hadoop-2.7.6]# hadoop checknative
    18/07/24 11:25:17 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
    18/07/24 11:25:18 INFO util.ExitUtil: Exiting with status 1



    사전에 빌드를 위해 필요한 친구들을 먼저 설치해주자.

    1. protocol buffers

    2. snappy

    3. 그리고 hadoop homepage에 나와있는 것들.

    • C compiler (e.g. GNU C Compiler)
    • GNU Autools Chain: autoconf, automake, libtool
    • zlib-development package (stable version >= 1.2.0)
    • openssl-development package(e.g. libssl-dev)


    1) Protocol Buffers 설치 https://github.com/google/protobuf


    $ wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz


    * Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:2.7.6:protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin.MojoExecutionException: protoc version is 'libprotoc 2.6.1', expected version is '2.5.0'

    라고 나중에 에러가 떠버린다. 그러므로 최신버전이 뭐던간에,, 무조건 2.5.0으로!


    $ ./configure --prefix=/usr

    $ make

    $ make check #그냥 확인용

    $ make install                // make && make install로 한방에 해도 된다.

    $ protoc --version


    ERROR
    protoc: error while loading shared libraries: libprotobuf.so.9: cannot open shared object file: No such file or directory

    :해결방안

    $vim /etc/ld.so.conf

    / usr / local / lib 라고 내용에 추가


    $ldconfig



    2) Snappy 설치 http://google.github.io/snappy/


    $https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz

    $ ./configure --prefix=/usr

    $ make

    $ make install


    3) gcc 설치  https://gist.github.com/jtilly/2827af06e331e8e6b53c (좀 오래걸림)


    4) maven 설치 http://maven.apache.org/ 


    $wget https://ftp.gnu.org/gnu/gcc/gcc-4.9.3/gcc-4.9.3.tar.gz

    $vi /etc/profile

    export MAVEN_HOME=설치경로

    export PATH=$PATH:$MAVEN_HOME/bin

    $source /etc/profile


    3)->4)->5) 설치 순서는 중요하다. 이렇게 안하면 오류가 난다고 한다.


    3) M4 설치http://ftp.gnu.org/gnu/m4/


    4) autoconf 설치 ftp://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz

    $ ./configure --prefix=/usr

    $ make & make install


    5) automake 설치 ftp://ftp.gnu.org/gnu/automake/

    $ ./configure --prefix=/usr



    ERROR

    make 시도시 오류 발생


    help2man: can't get `--help' info from automake-1.16
    Try `--no-discard-stderr' if option outputs to stderr
    make: *** [doc/automake-1.16.1] Error 255


    해결;


    1차 시도 .  per 의존성 설치하라고 한다. https://centos.pkgs.org/7/centos-x86_64/perl-Thread-Queue-3.02-2.el7.noarch.rpm.html


    안되어서 그냥 하위 버전 받았다.


    6) zlib 설치 https://zlib.net/

    $ ./configure --prefix=/usr

    $ make & make install

    $ ./configure --prefix=/usr

    $ make & make install


    8) zlib-devel 설치
    $ rpm -ivh 파일명

    9) bzip-devel 설치
    $ rpm -ivh 파일명

    10) open-ssl-devel  설치

    ERROR
    *rpm 명령어 rpm 설치 관련 글 http://weejw.tistory.com/236
    1) 설치 rpm -ivh
    2) 업그레이드 rpm -Uvh
    3) 제거 rpm -e
    4) 설치된 rpm들 확인하는 방법 rpm -qa | grep [확인하고자 하는 rpm의 이름/일부분만 적어도된다]

    error: Failed dependencies:
        krb5-devel(x86-64) is needed by openssl-devel-1:1.0.2k-12.el7.x86_64
        openssl-libs(x86-64) = 1:1.0.2k-12.el7 is needed by openssl-devel-1:1.0.2k-12.el7.x86_64

    error : Failed dependencies:
    keyutils-libs-devel is needed by krb5-devel-1.12.2-14.el7.x86_64

    에러가 나는 파일을 검색해서 설치해준다. 여기가 내가 이틀이상을 허비한 구역인데,,  의존성이 깨지는게 두려워서 소심했던 탓에 이틀이나 ㅠㅠ

    예를 들어서  아래와 같이 지금 업그레이드 하려는 파일을 다른파일이 의존하고 있으면 과감하게 rpm -Uvh --nodeps로 의존성을 무시해서 설치한다음에 의존하고 있던 다른 파일 또한 업그레이드 해주면 문제가 생기지 않는다. 그러므로 어떤 놈이 어떤 친구에게 의존하고 있는지를 잘 기억해야한다. !!

    (installed)가 있는 친구가 새로 업글 하려는 친구에게 의존하는중이라서 생기는 문제

    error: Failed dependencies:
        e2fsprogs-libs = 1.41.12-22.el6 is needed by (installed) e2fsprogs-1.41.12-22.el6.x86_64




    이제 필요한건 다깔았으니 빌드하고 빌드된 파일을 복사해서 원래 hadoop폴더로 ...~*

    빌드를 위해 아래의 명령어 실행

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

    ERROR


    the requested profile "dist" could not be activated because it does not exist.


    http://www.apache.org/dist/hadoop/core/ 여기서 src버전으로 받아야 pom.xml 파일이 같이 있기때문에 빌드할 수 있음.


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

    출처: http://bloodguy.tistory.com/entry/Hadoop-네이티브-라이브러리-빌드-build-native-library [Bloodguy]
    mvn package -Pdist,native -DskipTests -Dtar -Dmaven.javadoc.skip=true -Dsnappy.prefix=$HADOOP_HOME/snappy -Drequire.snappy=true

    출처: http://bloodguy.tistory.com/entry/Hadoop-네이티브-라이브러리-빌드-build-native-library [Bloodguy]


    빌드가 다 되었으면 해당 hadoop-src 폴더 내에 hadoop-dist/target/hadoop-버전/ 아래에 있는 lib/native에 있는 파일들을 원래 hadoop/native로 복사해줌

    hadoop checknative라고 치면 아래와 같이 원래는 false였던것이 hadoop에 경로가 생긴다. 근데 왜 아직도 snappy랑 bzip은 false일까,,,ㅠ


    [root@cl3 native]# hadoop checknative
    18/07/26 17:06:35 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
    18/07/26 17:06:35 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
    Native library checking:
    hadoop:  true /usr/local/cluster/hadoop/hadoop-2.7.6/lib/libhadoop.so.1.0.0
    zlib:    true /lib64/libz.so.1
    snappy:  false
    lz4:     true revision:99
    bzip2:   false
    openssl: true /usr/lib64/libcrypto.so

    cp /usr/lib/libappy.*cp /usr/lib/libsnappy.





    '2018년 > spark' 카테고리의 다른 글

    spark 예제파일 submit 하기  (0) 2018.10.08
    오랜만에 만져보는 spark scala코드  (0) 2018.07.18
    GraphX ~그래프 연산  (0) 2018.04.03
    GraphX ~그래프 생성까지  (0) 2018.04.02
    spark info좀 꺼보자  (0) 2018.02.28