이전에
Hadoop Lzo 압축 설정에 관한 블로깅을 했는데...
그 이후에 발생했던 문제와,
실질적으로 사용하는 방법에 대해서 정리..
# 두 가지 버전의 hadoop lzo 1.
https://github.com/omalley/hadoop-gpl-compression - 이전에 설치했던 버전
2.
https://github.com/kevinweil/hadoop-lzo - 이 버전으로 다시 설치
# 사용법1. 파일시스템의 파일을 압축해서 hdfs에 올리는 방법.> lzop 파일이름
> hadoop fs -copyFromLocal 파일이름.lzo hdfs위치
2. hdfs의 lzo 파일에 index 만들기 - lzo 파일이 있는곳에 파일이름.index라는 파일이 생긴다.
- index를 안해주면, lzo 파일을 split하지 않고 하나의 map으로 처리
1) index it in-process via:
hadoop jar /path/to/your/hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer big_file.lzo
2) index it in a map-reduce job via:
hadoop jar /path/to/your/hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer big_file.lzo
3. splitted lzo 파일 사용 - 파일이름.index 를 보고 알아서 나누어서 작업한다.
1) java
job 설정에 다음을 추가..
job.setInputFormatClass(LzoTextInputFormat.class);
2)
streaming (테스트 안해봄)
실행할때 다음을 추가
"-inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat
4. 최종 결과 파일을 fs로 1) lzo_deflate
- 압축코덱을 LzoCodec으로 하면 .lzo_deflate의 형태로 압축된다.
- lzo_deflate는 파일시스템으로 getmerge 한 후 압축을 어떻게 푸는지 알수가 없어서, 코덱 설정을 바꿈.
<property>
<name>mapred.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
2) LzoCodec -> LzopCodec
- The
LzoCodec for the pure LZO
format, which uses the .lzo_deflate filename extension (by analogy with
DEFLATE, which is gzip without the headers).
- The
LzopCodec is compatible with the lzop tool, which is essentially the LZO format with extra headers.
- map 과 reduce 사이에는 header가 없는 LzoCodec으로..
- 최종 output은 LzopCodec 으로 변경
<property>
<name>mapred.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzopCodec</value>
</property>
3) getmerge 후에 fs에서 압출 풀때
- 1개의 reducer의 경우 'lzop -d' 로 일반적인 경우처럼
- reducer의 개수 1개 이상일 때는 다음과 같이
lzop -d 파일명.lzo -o 압축풀파일명