Hive LZO 압축
Hive LZO 압축 (LanguageManual LZO)
LZO는 무손실 데이터 압축 라이브러리로 압축률보다 속도를 우선해요. Hive에서 데이터를 LZO로 압축해 저장하고 읽는 방법을 정리했어요.
출처: 문서
본문
일반 LZO 개념
LZO는 압축률보다 속도를 선호하는 무손실 데이터 압축 라이브러리입니다. LZO에 대한 일반 정보는 http://www.oberhumer.com/opensource/lzo와 http://www.lzop.org를, Hive의 압축에 대한 정보는 Compressed Data Storage를 참고하세요.
세 개의 컬럼을 가진 간단한 데이터 파일을 상상해 봅시다.
- id
- first name
- last name
4개의 레코드를 담은 데이터 파일을 채워 봅시다:
19630001 john lennon
19630002 paul mccartney
19630003 george harrison
19630004 ringo starr
이 데이터 파일을 /path/to/dir/names.txt라고 합시다.
이것을 LZO 파일로 만들려면 lzop 유틸리티를 사용할 수 있으며 names.txt.lzo 파일이 생성됩니다.
이제 names.txt.lzo 파일을 HDFS로 복사합니다.
사전 요구 사항
Lzo/Lzop 설치
lzo와 lzop은 Hadoop 클러스터의 모든 노드에 설치되어야 합니다. 설치 세부 사항은 이 문서의 범위를 벗어납니다.
core-site.xml
core-site.xml에 다음을 추가합니다:
com.hadoop.compression.lzo.LzoCodeccom.hadoop.compression.lzo.LzopCodec
예를 들어:
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
다음으로 LZO 인덱스 파일을 만드는 명령을 실행합니다:
hadoop jar /path/to/jar/hadoop-lzo-cdh4-0.4.15-gplextras.jar com.hadoop.compression.lzo.LzoIndexer /path/to/HDFS/dir/containing/lzo/files
이 명령은 HDFS에 names.txt.lzo를 만듭니다.
테이블 정의
다음 hive -e 명령은 LZO 압축 외부 테이블을 만듭니다:
hive -e "CREATE EXTERNAL TABLE IF NOT EXISTS hive_table_name (column_1 datatype_1......column_N datatype_N)
PARTITIONED BY (partition_col_1 datatype_1 ....col_P datatype_P)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT \"com.hadoop.mapred.DeprecatedLzoTextInputFormat\"
OUTPUTFORMAT \"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat\";
참고: 'hive -e' 명령이 올바르게 동작하려면 큰따옴표를 이스케이프해야 합니다.
명령 구문에 대한 정보는 CREATE TABLE과 Hive CLI를 참고하세요.
Hive 쿼리
옵션 1: LZO 파일 직접 생성
- Hive 쿼리의 출력으로 LZO 파일을 직접 만듭니다.
lzop명령 유틸리티 또는 커스텀 Java를 사용해.lzo파일에 대한.lzo.index를 생성합니다.
Hive 쿼리 매개변수
SET mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec
SET hive.exec.compress.output=true
SET mapreduce.output.fileoutputformat.compress=true
예를 들어:
hive -e "SET mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec; SET hive.exec.compress.output=true;SET mapreduce.output.fileoutputformat.compress=true; <query-string>"
참고: 데이터 세트가 크거나 출력 파일 수가 많으면 이 옵션은 동작하지 않습니다.
옵션 2: 커스텀 Java를 작성해 LZO 파일 생성
- Hive 쿼리의 출력으로 텍스트 파일을 만듭니다.
- 다음을 수행하는 커스텀 Java 코드를 작성합니다.
- Hive 쿼리가 생성한 텍스트 파일을
.lzo파일로 변환 - 위에서 생성된
.lzo파일에 대한.lzo.index파일 생성
- Hive 쿼리가 생성한 텍스트 파일을
Hive 쿼리 매개변수
쿼리 문자열 앞에 다음 매개변수를 붙입니다:
SET hive.exec.compress.output=false
SET mapreduce.output.fileoutputformat.compress=false
예를 들어:
hive -e "SET hive.exec.compress.output=false;SET mapreduce.output.fileoutputformat.compress=false;<query-string>"
더 알아보기 (Learn more)
Hive의 압축 전반에 대한 내용은 Compressed Data Storage 문서를 참고하세요. LZO는 스플릿 가능한 압축이 필요할 때 유용하며, 인덱스 생성이 중요해요.