hive_format
์ ์ฅ ํฌ๋งท
ํ์ด๋ธ๋ ๋ ๊ฐ์ ์ฐจ์, ์ฆ ๋ก์ฐ ํฌ๋งท๊ณผ ํ์ผ ํฌ๋งท์ผ๋ก ํ ์ด๋ธ ์ ์ฅ์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๋ก์ฐ ํฌ๋งท์ ํ๊ณผ ํน์ ํ์ ํ๋๊ฐ ์ ์ฅ๋ ๋ฐฉ์์ ์ง์ํฉ๋๋ค. ์ง๋ ฌ์-์ญ์ง๋ ฌ์(Serializer-Deserializer)๋ฅผ ํผํฉํ ํ์ด๋ธ ์ ๋ฌธ ์ฉ์ด์ธ SerDe๋ก ์ ์๋ฉ๋๋ค.
ํ ์ด๋ธ์ ์ง์ํ๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ์ญ์ง๋ ฌํ๋ฅผ ์ํํ ๋ SerDe๋ ํ์ผ์ ์ ์ฅ๋ ๋ฐ์ดํธ์ ๋ฐ์ดํฐํ์ ํ์ด๋ธ์์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ก ์ญ์ง๋ ฌํํ์ฌ ๊ทธ ๋ฐ์ดํฐ์ ๋ํ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
ํ์ผ ํฌ๋งท
Text File
ํ ์คํธ ํ์ผ ํฌ๋งท์ ํผ๊ทธ๋ grep,sed,awk์ ๊ฐ์ ์ ๋์ค ํ ์คํธ ๋๊ตฌ ๋ฑ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ํธ๋ฆฌํฉ๋๋ค. ํ์ผ์ ๋ด์ฉ์ ์ง์ ๋ณด๊ณ ์์ ํ๊ธฐ ์ฌ์๋๋ค.
ํ ์คํธ ํฌ๋งท์ ๋ฐ์ด๋๋ฆฌ ํฌ๋งท๊ณผ ๋น๊ตํ๋ฉด ์ ์ฅ ๊ณต๊ฐ์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ์ง๋ ๋ชปํฉ๋๋ค. ์์ถ์ ์ฌ์ฉํ ์๋ ์์ง๋ง ๋ฐ์ด๋๋ฆฌ ํฌ๋งท์ ์ฌ์ฉํจ์ผ๋ก์จ ํ ์คํธ ํฌ๋งท๋ณด๋ค ๋ ํฅ์๋ ๋์คํฌ I/O์ ํจ๊ณผ์ ์ธ ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉํฉ๋๋ค.
SequenceFile
์ํ์คํ์ผ์ ๋ฐ์ด๋๋ฆฌ ํค-๊ฐ์ผ๋ก ๊ตฌ์๋ ํ๋ซ ํ์ผ(flat file - ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์๊ณ ๋จ์ํ ๊ฐ์ ํ์์ ๋ ์ฝ๋์ ๋ชจ์์ผ๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค). ํ์ด๋ธ๋ ์ฟผ๋ฆฌ๋ฅผ ๋งต๋ฆฌ๋์ค ์ก์ผ๋ก ๋ณํํ ๋ ๋ ์ฝ๋๋ก ์ฌ์ฉํ๊ธฐ ์ํ ์ ๋นํ ํค-๊ฐ ์์ ์ ํฉ๋๋ค.
์ํ์คํ์ผ์ ๋ธ๋ญ๊ณผ ๋ ์ฝ๋ ์์ค์์ ์์ถ์ด ๊ฐ๋ฅํ๋ฏ๋ก ๋์คํฌ ๊ณต๊ฐ ํ์ฉ๊ณผ I/O๋ฅผ ์ต์ ํํ ์ ์๊ณ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ธ๋ก ๋จ์ ํ์ผ ๋ถํ ๋ ๊ฐ๋ฅํฉ๋๋ค.


https://towardsdatascience.com/new-in-hadoop-you-should-know-the-various-file-format-in-hadoop-4fcdfa25d42b
ํ๋ก์ด ์ง์ํ๋ ์ํ์คํ์ผ ํฌ๋งท์ ํ์ผ์ ๋ธ๋ก์ผ๋ก ๋๋ ์ ์๊ณ ์ ํ์ ์ผ๋ก ๋ธ๋ก์ ์์ถํ ์ ์์ต๋๋ค. CREATE TABLE ์ ์ STORED AS SEQUENCEFILE ์ ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
No compression์ ๋ฐ์ดํฐ๋ฅผ ์์ถํ์ง ์๊ณ ๊ทธ๋๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ์์ถ ๋ฐฉ์์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ๋์คํฌ ๊ณต๊ฐ์ ์ ๊ฒ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋, ํฐ ํ์ผ์ ์ฒ๋ฆฌํ ๋ ์ ์ถ๋ ฅ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค.
Record compression์ ๋ฐ์ดํฐ์ ๊ฐ ๋ ์ฝ๋(ํค-๊ฐ ์)๋ฅผ ์์ถํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค์ด ๋์คํฌ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค. Record compression์ deflate, gzip, bzip2 ๋ฑ์ ์์ถ ๋ฐฉ์์ ์ง์ํฉ๋๋ค.
Block compression์ ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ก ๋จ์๋ก ์์ถํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ Record compression๊ณผ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ก ๋จ์๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ๋ธ๋ก ๋จ์๋ก ์ ์ถ๋ ฅ์ด ์ํ๋์ด ์ฒ๋ฆฌ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค. Block compression์ deflate, gzip, bzip2, LZO, Snappy ๋ฑ์ ์์ถ ๋ฐฉ์์ ์ง์ํฉ๋๋ค.
RCFile

https://towardsdatascience.com/new-in-hadoop-you-should-know-the-various-file-format-in-hadoop-4fcdfa25d42b
Hive์ Record Columnar File์ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋จ์๋ก Row Group์ผ๋ก ๋๋๊ณ Row Group ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ก ์ ์ฅํ๋ ํ์์ ํ์ผ์ผ๋ก MapReduce ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ์์คํ ์ฉ์ผ๋ก ์ค๊ณ๋ ๋ฐ์ดํฐ ๋ฐฐ์น ๊ตฌ์กฐ์ ๋๋ค
RCFile์ ํ ์ ์ฅ์์ ์ด ์ ์ฅ์์ ์ฅ์ ์ ๊ฒฐํฉํ์ฌ ๋น ๋ฅธ ๋ฐ์ดํฐ ๋ก๋ ๋ฐ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ, ์คํ ๋ฆฌ์ง ๊ณต๊ฐ์ ํจ์จ์ ์ธ ์ฌ์ฉ ๋ฐ ๋งค์ฐ ๋์ ์ธ ์ํฌ๋ก๋ ํจํด์ ๋ํ ์ ์์ฑ์ ๋ํ ์๊ตฌ๋ฅผ ์ถฉ์กฑํฉ๋๋ค.
๋๋ถ๋ถ ํ๋ก๊ณผ ํ์ด๋ธ ์ ์ฅ ๊ณต๊ฐ์ ๋ก์ฐ ๊ธฐ๋ฐ์ด๋ฉฐ ์ด๋ ๋๋ถ๋ถ ํจ๊ณผ์ ์ ๋๋ค. ํ์ผ์ ๋ธ๋ก ๋จ์ ์์ถ์ ๋ฐ๋ณต๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ํจ์จ์ ์ด๊ณ ๋ก์ฐ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ค๋ฃฐ ์ ์๋ ์ฌ๋ฌ ํ ์คํธ ์ฒ๋ฆฌ ๋๊ตฌ๋ ๋๋ฒ๊น ๋๊ตฌ(more,head,awk)์ ์ ๋ง์ต๋๋ค.
ํ ์ด๋ธ์ด ์๋ฐฑ ๊ฐ์ ์ปฌ๋ผ์ ๊ฐ์ง๊ณ ์๊ณ ๋๋ถ๋ถ ์ฟผ๋ฆฌ์์ ๊ทธ์ค ๋ช ๊ฐ๋ง ์ฌ์ฉํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค๊ธฐ ์ํด ์ ์ฒด ๋ก์ฐ๋ฅผ ์ค์บํ๋ ๋ฐฉ์์ ๋ญ๋น์ ๋๋ค. ๋์ ์ ๋ฐ์ดํฐ๊ฐ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ์ฅ๋์ด ์๋ค๋ฉด ํ์ํ ๋ฐ์ดํฐ ์ปฌ๋ผ๋ง ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ํฅ์๋ ๊ฒ์ ๋๋ค.
ํ์ด๋ธ์ ๊ฐ๋ ฅํ ์ฅ์ ์ค ํ๋๋ ์๋ก ๋ค๋ฅธ ๋ ๋ฐ์ดํฐ ํฌ๋งท์ ๊ฐ๋จํ ๋ณํํ๋ ๋ฅ๋ ฅ์ผ๋ก ์ ์ฅ ์ ๋ณด๋ ํ ์ด๋ธ์ ๋ฉํ๋ฐ์ดํฐ์ ์ ์ฅํฉ๋๋ค.
ํ ์งํฅ

https://towardsdatascience.com/new-in-hadoop-you-should-know-the-various-file-format-in-hadoop-4fcdfa25d42b
์ด ์งํฅ

https://towardsdatascience.com/new-in-hadoop-you-should-know-the-various-file-format-in-hadoop-4fcdfa25d42b
Avro Files

https://www.oreilly.com/library/view/operationalizing-the-data/9781492049517/ch04.html
์๊ฒฉ ํ๋ก์์ ํธ์ถ ๋ฐ ๋ฐ์ดํฐ ์ง๋ ฌํ ํ๋ ์์ํฌ์ ๋๋ค.
Apache์ Hadoop ํ๋ก์ ํธ ๋ด์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ JSON์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ํ ๋ฐ ํ๋กํ ์ฝ์ ์ ์ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋จํ ์ด์ง ํ์์ผ๋ก ์ง๋ ฌํํฉ๋๋ค
ORC Files

image https://www.oreilly.com/library/view/operationalizing-the-data/9781492049517/ch04.html
์ด ํ์์ผ๋ก ์ ์ฅ๋ ํ ๋ฐ์ดํฐ์ ํจ๊ป ํ๋์ ํ์ผ์ ํ ๋ชจ์์ ์ ์ฅํฉ๋๋ค
ํด๋ฌ์คํฐ ์ ์ฒด์์ ํ ๋ชจ์์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด ๋ ์ด์์์ด ์๋ ๊ฐ ํ์ผ์ ์์ถ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
๋ฐ์ดํฐ์ ์ด์ ๊ฑด๋๋ฐ๋ฉด ์ฝ๊ธฐ ๋ฐ ์์ถ ํด์ ๋ก๋๊ฐ ๋ชจ๋ ์ค์ด๋ญ๋๋ค.
Parquet

image https://www.oreilly.com/library/view/operationalizing-the-data/9781492049517/ch04.html
Hadoop์ฉ ์คํ ์์ค ์ด ์งํฅ ์คํ ๋ฆฌ์ง ํ์์ ๋๋ค.
Parquet๋ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ๋๋์ผ๋ก ์์ ํ๋๋ก ์ต์ ํ๋์ด ์์ผ๋ฉฐ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์์ถ ๋ฐ ์ธ์ฝ๋ฉ ์ ํ์ ์ํ ๋ฐฉ๋ฒ์ ํฌํจํฉ๋๋ค.
ORC, Parquet ๋ฐ Avro์ ํ์ง
- ORCParquetAvro
Row or column
Column
Column
Row
Compression
Great
Great
Good
Speedup (compared to text file)
10โ100x
10โ100x
10x
Schema evolution
Good
Better
Best
Platforms
Hive, Spark, Presto
Hive, Spark, Presto
Hive, Spark
Splittability
Best
Best
Better
File statistics
Yes
Yes
No
Indexes
Yes
Yes
No
Bloom filters
Yes
No
No
Custom INPUTFORMAT and OUTPUTFORMAT
ํ์ด๋ธ๋ ํ๋ก์ ์ ๋ ฅ ํฌ๋งท(InputFormat) API๋ฅผ ์ด์ฉํด ํ ์คํธ ํ์ผ, ์ํ์คํ์ผ, ์ฌ์ฉ์ ์ ์ ํ์ผ๊ณผ ๊ฐ์ ๋ค์ํ ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ์ถ๋ ฅ ํฌ๋งท(OutputFormat) API๋ฅผ ์ด์ฉํ๋ฉด ๋ค์ํ ํฌ๋งท์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ธ ์๋ ์์ต๋๋ค.
์ ๋ ฅ ํฌ๋งท(Input Format)์ ์ฃผ๋ก ํ์ผ ํํ์ ์ ๋ ฅ ์คํธ๋ฆผ์ ๋ ์ฝ๋ ๋จ์๋ก ๋ถํ ๋๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํฉ๋๋ค. SerDe๋ ๋ ์ฝ๋๋ฅผ ์ปฌ๋ผ ๋จ์๋ก ๋ถ์ํ๊ณ ์ปค์คํ ์ ๋ ฅ ํฌ๋งท์ INPUTFORMAT ๋ฌธ์ ์ด์ฉํด ํ ์ด๋ธ์ ์์ฑํ ๋ ์ ์ธํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ STORED AS TEXTFILE ๋ช ์ธ์ ์ ๋ ฅ ํฌ๋งท์org.apache.hadoop.mapreduce.lib.input.TextInputFormat์ผ๋ก ์๋ฐ ๊ฐ์ฒด๋ก ๊ตฌํ๋์ด ์์ต๋๋ค.
์ถ๋ ฅ ํฌ๋งท(Output Format)์ ์ถ๋ ฅ ์คํธ๋ฆผ(๋ณดํต์ ํ์ผ)์ ์ด๋ป๊ฒ ๋ ์ฝ๋๋ฅผ ๊ธฐ๋กํ๋์ง ๊ฒฐ์ ํฉ๋๋ค. SerDe๋ ๊ฐ๋ณ ๋ ์ฝ๋๋ฅผ ์ ์ ํ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ์ง๋ ฌํํ๊ณ ์ฌ์ฉ์ ์ ์ ์ถ๋ ฅ ํฌ๋งท์ OUTPUTFORMAT๋ฌธ์ ์ด์ฉํด ํ ์ด๋ธ์ ์์ฑํ ๋ ์ ์ธํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ํจ์(UDF), ์ฌ์ฉ์ ์ ์ ์ง๊ณ ํจ์(user-defined aggregate function - UDAF), ์ฌ์ฉ์ ์ ์ ํ ์ด๋ธ ์์ฑ ํจ์(user-defined table-generating function - UDTF) ๋ฑ ์ธ ์ข ๋ฅ์ UDF๋ฅผ ์ง์ํฉ๋๋ค. ์ธ ์ข ๋ฅ์ ์ฐจ์ด์ ์ ์ ๋ ฅ์ผ๋ก ๋ฐ๋ ํ๊ณผ ์ถ๋ ฅ๋๋ ํ์ ๊ฐ์๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋๋ค.
์ ๊ท UDF๋ ๋จ์ผ ํ์ ์ฒ๋ฆฌํ ํ ๋จ์ผ ํ์ ์ถ๋ ฅํ๋ฉฐ ์ํ ํจ์๋ ๋ฌธ์์ด ํจ์์ ๊ฐ์ ๋๋ถ๋ถ์ ํจ์๊ฐ ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
UDAF๋ ๋ค์์ ์ ๋ ฅ ํ์ ์ฒ๋ฆฌํ ํ ๋จ์ผ ํ์ ์ถ๋ ฅํ๋ฉฐ COUNT๋ MAX๊ฐ์ ์ง๊ณ ํจ์๊ฐ ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
UDTF๋ ๋จ์ผ ๋ก์ฐ๋ฅผ ์ฒ๋ฆฌํ ํ ๋ค์์ ํ(ํ ์ด๋ธ)์ ์ถ๋ ฅํจํฉ๋๋ค.
Reference
https://www.amazon.com/Programming-Hive-Warehouse-Language-Hadoop/dp/1449319335
https://www.amazon.com/Hadoop-Definitive-Guide-Tom-White/dp/1449311520
https://www.oreilly.com/library/view/operationalizing-the-data/9781492049517/ch04.html
https://cwiki.apache.org/confluence/display/Hive/FileFormats
Last updated