[Hadoop] Native library installation on osx
Elastic/Hadoop 2017. 11. 21. 15:54hdfs 에서 snappy 압축 파일을 바로 읽으려고 하니 아래와 같은 오류 메시지가 발생을 했습니다.
hadoop 을 구성 할 때 source build 를 하지 않고 그냥 binary 를 가지고 사용해서 그런것 같아 source 를 받아서 build 를 하기로 했습니다.
[에러 메시지]
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
$ hadoop checknative -a
Native library checking:
hadoop: false
zlib: false
snappy: false
lz4: false
bzip2: false
openssl: false
처럼 나와서 빌드를 하게 되었습니다.
참고문서는 아래 링크를 보시면 됩니다.
Ref.
https://medium.com/@faizanahemad/hadoop-native-libraries-installation-on-mac-osx-d8338a6923db
https://gist.github.com/zedar/f631ace0759c1d512573
brea install 을 통해서 필요한 몇 가지를 먼저 구성 하셔야 합니다.
$ brew install gcc autoconf automake libtool cmake snappy gzip bzip2 homebrew/versions/protobuf250 zlib openssl
참고로 저는 protobuf 3.4.0 이 설치되어 있어서 downgrade 했습니다.
pure hadoop build 는 maven 은 3.x 이상을 요구 합니다.
- hadoop-2.7.2 빌드 했습니다.
[빌드 및 native library 복사]
$ ../apache-maven-3.5.0/bin/mvn package -Pdist,native -DskipTests -Dtar -e
$ vi .bash_profile
export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2m
export OPENSSL_INCLUDE_DIR=/usr/local/Cellar/openssl/1.0.2m/include
export PROTOC_HOME=/usr/local/opt/protobuf@2.5
export HADOOP_HOME=/Users/henry/Work/apps/hadoop-2.7.2
PATH=$PROTOC_HOME/bin:$HADOOP_HOME/bin:$HOME/bin:$PATH
export PATH
$ cp -r hadoop-dist/target/hadoop-2.7.2/lib/native/* /Users/henry/Work/apps/hadoop-2.7.2/lib/native/osx/
$ vi etc/hadoop/hadoop-env.sh
export HADOOP_HOME="/Users/henry/Work/apps/hadoop-2.7.2"
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native/osx"
$ vi etc/hadoop/core-site.xml
<property>
<name>io.compression.codecs</name> <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
여기 까지 하고 나서 아래 명령어를 다시 실행해 봅니다.
$ hadoop checknative -a
17/11/21 15:45:16 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
17/11/21 15:45:16 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /Users/henry/Work/apps/hadoop-2.7.2/lib/native/osx/libhadoop.dylib
zlib: true /usr/lib/libz.1.dylib
snappy: true /usr/local/lib/libsnappy.1.dylib
lz4: true revision:99
bzip2: false
openssl: false build does not support openssl.
Hadoop source build 하다 보면 아래 에러가 발생을 합니다.
[INFO] Apache Hadoop Pipes ................................ FAILURE [ 0.627 s]
이 경우 아래 문서 참고해서 해결 하시면 됩니다.
Ref.
$ cd hadoop/hadoop-tools/hadoop-pipes
$ vi pom.xml
...중략...
<arg line="${basedir}/src/ -DJVM_ARCH_DATA_MODEL=64"/>
...중략...
-> 여기서 64를 6으로 변경해 주시기 바랍니다.