티스토리 뷰
hive 테이블의 경우, 파일포맷(text, parquet, rcfile, sequence, orc) 별로 테이블을 선언하는 쿼리가 조금씩 차이가 있어서 create table 하는 방법과, 테이블의 파일포맷별 압축 알고리즘(gzip or zlib, snappy)을 선택하는 방법이 달라서 정리한 문서이다. (옛날에 방치된 내 블로그에 정리한글인데 옮겨옴)
1. text 파일
아래와 같이 text 파일 포맷을 사용하는 Hive 테이블을 만들때는 특별히 선언할것은 없다.
단, 압축을 하기위해서 압축알고리즘을 지정하는 방법은 SET 을 통해 환경변수로 변경후 insert 를 하면 된다.
create table tb_text (
ymd String,
tag String,
cnt int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
;
TEXT 포맷의 압축 알고리즘 선택은 아래와 같다. 압축을 안하라면 당연히 아래 옵션은 생략해야한다.
SET hive.exec.compress.output=true;
-- Gzip
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
-- Snappy
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
2. Parquet
parquet 파일 포맷은 아래와 같이 테이블을 생성하면 된다. SERDE 와 INPUT/OUTPUT 포맷을 지정하는것이 특징이다.
create table tb_text (
ymd String,
tag String,
cnt int
)
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
;
압축 여부를 선택하는 방법은 아래와 같이 parquet.compression 옵션을 변경해야한다.
-- 압축안함
set parquet.compression=UNCOMPRESSED;
-- GZIP
set parquet.compression=GZIP;
-- SNAPPY
set parquet.compression=SNAPPY;
3. RCFILE
사실 자주 안쓰는 파일포맷이긴 한데, 성능테스트겸 시도해본 파일포맷이다. (보통 orc, text, parquet 을 많이씀)
create table tb_text (
ymd String,
tag String,
cnt int
)
STORED AS RCFILE
;
RCFILE 의 압축지정방법은 text 파일방식과 동일하다.
SET hive.exec.compress.output=true;
-- Gzip
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
-- Snappy
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; -- snappy
4. SEQUENCE
이것도 자주 안쓰지만 성능및 압축률 비교해보려고 사용했던거 같다.
create table tb_text (
ymd String,
tag String,
cnt int
)
STORED AS SEQUENCEFILE
;
압축은 역시 text, rcfile 과 같은으로 SET 을 통해 지정하는 방식이다.
SET hive.exec.compress.output=true;
-- Gzip
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
-- Snappy
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; -- snappy
5. ORC
ORC 는 hive 에서 밀어주는 느낌을 받는(?) 컬럼형 파일포맷이다. parquet 과 많이 비교되고 있긴한데 hive 와 궁합이 좋은 파일포맷으로 개인적으로 자주 활용한 포맷이다.
create table tb_text (
ymd String,
tag String,
cnt int
)
stored as orc
tblproperties ("orc.compress"="NONE")
-- ZLIB
-- tblproperties ("orc.compress"="ZLIB")
-- SNAPPY
-- tblproperties ("orc.compress"="SNAPPY")
;
압축 알고리즘을 지정하는건, 다른 파일포맷과 다르게 테이블 생성시점에 tblproperties 에 압축을 뭘로 할지 미리 정의해야한다.
6. AVRO
스미마 진화가 자주 일어난다면, avro 가 가장 좋은 선택이 된다.
압축을 할때는 parquet 과 유사하게 아래 옵션을 사용하면 된다.
create table tb_text (
ymd String,
tag String,
cnt int
)
stored as avro;
-- avro 에서 snappy 압축을 적용하는 옵션 (insert 시점에)
SET hive.exec.compress.output=true;
SET avro.output.codec=snappy;
-- snappy 이외에 deflate 와 bzip2 도 지원한다.
'데이터처리 > Hive' 카테고리의 다른 글
[hive] avro 압축 포맷별 용량 비교 (snappy, bzip2, deflate) - orc 는 덤 (0) | 2023.07.13 |
---|---|
[Hive] kafka 의 json 데이터를 hive 에서 다루는 방법 - KafkaStorageHandler 활용법 (0) | 2023.06.16 |
[HIVE] HiveAccessControlException Permission denied 원인 (0) | 2023.02.16 |
[튜닝] 리듀서가 적게 잡혀 느린 Group By 쿼리 튜닝하기 - CBO 삽질 케이스 (0) | 2023.02.09 |
[에러] beeline 에서 오류 원인 : Unexpected end of file when reading from HS2 server (0) | 2023.02.08 |