Hadoop EcoSystem

[Hive] 테이블 - SerDe

비번변경 2024. 2. 16. 00:07

개요

2024.01.18 - [Hive] 테이블 - 개념 및 유형에 이어서 이 글에서는 Hive가 데이터를 해석하는 방법을 제공하는 SerDe라는 개념에 대해 적어둔다.

 

 

SerDe

SerDe는 Serializer and Deserializer의 약어다. Hive는 FileFormat과 SerDe를 이용해 테이블 행을 읽고 쓴다.

파일을 읽을 때는 FileFormat을 이용한 후, Deserializer를 사용해 파일 데이터를 테이블 형식에 맞는 데이터로 변환한다.

반대로 파일을 쓸 때는 데이터를 Serializer를 이용해 key-value 형태로 변환한 후 FileFormat을 사용하여 파일로 저장한다.

 

 

Hive 기본 SerDe

Hive는 기본적으로 Avro, ORC, RegEx, Thrift, Parquet, CSV, JsonSerDe를 지원하는데, 테이블 생성 시 STORED AS에 지정하는 파일의 포맷에 따라 자동으로 선택된다.

Syntax Equivalent
STORED AS AVRO /
STORED AS AVROFILE
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
  STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
STORED AS ORC /
STORED AS ORCFILE
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
  STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
STORED AS PARQUET /
STORED AS PARQUETFILE
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
  STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
STORED AS RCFILE
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.RCFileInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'
STORED AS SEQUENCEFILE
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.SequenceFileInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.mapred.SequenceFileOutputFormat'
STORED AS TEXTFILE
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'

 

 

사용자 정의 SerDe

필요시 Hive가 기본적으로 제공하는 SerDe 외의 사용자가 직접 SerDe를 구현하여 사용할 수 있다.

참고 : https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HowtoWriteYourOwnSerDe

 

 

테이블의 SerDe 확인

테이블에 설정된 SerDe는 desc formatted 명령으로 확인할 수 있다.

# ORC 테이블 생성 
CREATE TABLE orc_tbl (
  col STRING
) STORED AS ORC;

# ORC 테이블 확인 
hive>desc formatted orc_tbl;

# ORC 테이블의 서데, 인풋 아웃풋 포맷
# Storage Information        
SerDe Library:          org.apache.hadoop.hive.ql.io.orc.OrcSerde    
InputFormat:            org.apache.hadoop.hive.ql.io.orc.OrcInputFormat  
OutputFormat:           org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat

 

 

참고 문서

https://cwiki.apache.org/confluence/display/hive/developerguide

https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-RegistrationofNativeSerDes

https://wikidocs.net/23469#row-format

https://wikidocs.net/25306

https://medium.com/analytics-vidhya/how-to-create-your-own-hive-serde-871fe675635