티스토리 뷰

LZO 압축 라이브러리를 쓰면 성능이 괜찮다고 해서 테스트를 진행해봤습니다.

그런데.....이거 정말 멘붕 직전까지 몰고 가네요..

하둡에서 LZO 사용하시는 분들 계시면 어떤 부분이 잘못된 건지 조언 부탁 드리겠습니다...ㅠㅠ


1. 네이티브 LZO 라이브러리 설치
- lzo-2.02.tar.gz 다운로드 (http://www.oberhumer.com/opensource/lzo/download/)
- lzo-2.02 설치
tar -xvf lzo-2.02.tar.gz
cd lzo-2.02
./configure --enable-shared
make
make install


2. 하둡 lzo 라이브러리 설치 (싱글노드)
hadoop-gpl-compression-0.1.0.tar.gz 다운로드 (https://github.com/omalley/hadoop-gpl-compression)
tar -xvf hadoop-gpl-compression-0.1.0.tar.gz
cd hadoop-gpl-compression-0.1.0
cp hadoop-gpl-compression-0.1.0.jar 하둡홈/lib
cp hadoop-gpl-compression-0.1.0/lib/native/Linux-amd64-64/*.* 하둡홈/lib/native/Linux-amd64-64
cp hadoop-gpl-compression-0.1.0/lib/native/Linux-i386-32/*.* 하둡홈/lib/native/Linux-i386-32


3. 하둡 환경 설정 파일에 lzo 관련 옵션 추가하기
- core-site.xml
  <property>
    <name>io.compression.codecs</name>
    <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,com.hadoop.compression.lzo.LzopCodec</value>
  </property>
  <property>
    <name>io.compression.codecs.lzo.class</name>
    <value>com.hadoop.compression.lzo.LzopCodec</value>
  </property>
 
- mpared-site.xml
  <property>
    <name>mapred.compress.map.outout</name>
    <value>true</value>
  </property>
   <property>
    <name>mapred.map.output.compression.codec</name>
    <value>com.hadoop.compression.lzo.LzopCodec</value>
  </property>  
  <property>
    <name>mapred.output.compress</name>
    <value>true</value>
  </property>
   <property>
    <name>mapred.output.compression.codec</name>
    <value>com.hadoop.compression.lzo.LzopCodec</value>
  </property>  

4. 맵리듀스 잡 실행 시 lzo 파일 생성됨
- 입력 포맷: TextInputFormat
- 출력 포맷: SequenceFileOutputFormat (압축 포맷: LzoCodec)
12/04/05 08:12:43 INFO input.FileInputFormat: Total input paths to process : 1
12/04/05 08:12:43 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
12/04/05 08:12:43 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library
12/04/05 08:12:43 INFO mapred.JobClient: Running job: job_201204050810_0002


5. 텍스트 파일을 lzo로 압축함
lzop test.txt
fs -ls
-rw-r--r-- 1 blrunner blrunner  14819909 2012-04-05 15:46 test.txt
-rw-r--r-- 1 blrunner blrunner   2544601 2012-04-05 15:46 test.txt.lzo


6. hadoop-lzo 소스 다운로드 (https://github.com/kevinweil/hadoop-lzo)
- hadoop-gpl-compression-0.1.0.jar 에는 LZO 인덱스 파일을 만드는 기능이 없음
- toddlipcon-hadoop-lzo-c7d54ff를 빌드해서 hadoop-lzo.jar 파일 생성


7. LZO 인덱스 파일 만들기 시도
/bin/hadoop jar hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer test.txt.lzo
12/04/05 10:15:30 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
12/04/05 10:15:30 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library
12/04/05 10:15:31 INFO lzo.LzoIndexer: [INDEX] LZO Indexing file test.txt.lzo, size 0.00 GB...
Exception in thread "main" java.lang.IllegalAccessError: class com.hadoop.compression.lzo.LzopDecompressor cannot access its superclass com.hadoop.compression.lzo.LzoDecompressor

==> hadoop-lzo.jar 패키지의 LzoDecompressor와 hadoop-gpl-compression-0.1.0.jar 패키지의 LzoDecompressor 충돌이 나는 것 같음

8. hadoop-gpl-compression-0.1.0 관련 파일 삭제 후 LZO  인덱스 파일 만들기 재시도

- 구글링에서 알게 된 아래 블로그를 참고하고 처음 설치했던 hadoop lzo 파일을 삭제함

http://sudhirvn.blogspot.com/2010/08/hadoop-lzo-installation-errors-and.html

rm 하둡홈/hadoop-gpl-compression-0.1.0.jar
rm 하둡홈/lib/native/Linux-amd64-64/libgplcompression.*
rm 하둡홈/lib/native/Linux-i386-32/libgplcompression.*

- 인덱스 파일 재생성

/bin/hadoop jar hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer test.txt.lzo
12/04/05 10:20:22 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
12/04/05 10:20:22 WARN lzo.LzoCompressor: java.lang.NoSuchFieldError: workingMemoryBuf
12/04/05 10:20:22 ERROR lzo.LzoCodec: Failed to load/initialize native-lzo library
12/04/05 10:20:23 INFO lzo.LzoIndexer: [INDEX] LZO Indexing file test.txt.lzo, size 0.00 GB...
Exception in thread "main" java.lang.RuntimeException: native-lzo library not available
        at com.hadoop.compression.lzo.LzopCodec.createDecompressor(LzopCodec.java:104)
        at com.hadoop.compression.lzo.LzoIndex.createIndex(LzoIndex.java:222)
        at com.hadoop.compression.lzo.LzoIndexer.indexSingleFile(LzoIndexer.java:117)
        at com.hadoop.compression.lzo.LzoIndexer.indexInternal(LzoIndexer.java:98)
        at com.hadoop.compression.lzo.LzoIndexer.index(LzoIndexer.java:52)
        at com.hadoop.compression.lzo.LzoIndexer.main(LzoIndexer.java:137)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

==> 네이티브 LZO 라이브러리를 로딩하지 못했음

"하둡홈/lib/native/Linux-amd64-64/"과 "하둡홈/lib/native/Linux-i386-32"에는 어떤 라이브러리를 복사해야하는 걸까요?

아니면 hadoop-env.sh에 어떤 경로를 설정해야 네이티브 LZO 라이브러리를 찾을 수 있을까요? --;;

저작자 표시 비영리 변경 금지
신고
댓글
댓글쓰기 폼