๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ€ Data Engineering/Iceberg

[Apache Iceberg] Iceberg ์ด์ „์˜ Table Format, Hive

๐ŸงŠ Apache Iceberg: The Definitive Guide ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“ Chapter 1. Introduction to Apache Iceberg ๊ธ€ ๋ชจ์•„๋ณด๊ธฐ : 

โ–บ 1ํŽธ : [Apache Iceberg] ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ (1) : OLAP์™€ Data Warehouse
โ–บ 2ํŽธ : [Apache Iceberg] ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ (2) : Data Lake์™€ Data Lakehouse
โ–บ 4ํŽธ : [Apache Iceberg] Iceberg ์„ค๊ณ„ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ฃผ์š” ํŠน์ง•

 

 

๐Ÿ’ก ๋“ค์–ด๊ฐ€๋ฉฐ

์ง€๋‚œ ๊ธ€์—์„œ๋Š” Data Lake์™€ Data Lakehouse์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Apache Iceberg๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋  ๋•Œ๊นŒ์ง€ Table Format์˜ ์—ญ์‚ฌ ํ๋ฆ„์— ๋Œ€ํ•ด ์งง๊ฒŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


 

1๏ธโƒฃ  Table Format ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์ƒ๊ธฐ๊ธฐ๊นŒ์ง€

 

Table Format์€ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ "ํ…Œ์ด๋ธ”"๋กœ ๊ตฌ์กฐํ™”ํ•˜๋Š”(structuring) ๋ฐฉ๋ฒ•์„ ๋งํ•ฉ๋‹ˆ๋‹ค. 

์ด ํ…Œ์ด๋ธ”์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ถ”์ƒํ™”(abstraction)์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

RDBMS์˜ ์‹œ์ ˆ, Table Format์ด๋ผ๋Š” ์šฉ์–ด๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ,

์ด๋Š” ๋‹น์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ Storage Engine์ด ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋™์ž‘์„ ๋‹ด๋‹นํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋””์— ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€๋Š” ์ถ”์ƒํ™” ๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•˜๊ฒŒ ์—ฌ๊ฒจ์กŒ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชฉ์ ์— ๋งž๋Š” ๋‹ค์–‘ํ•œ Compute Engine์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ์ˆ˜๋ฉด ์œ„๋กœ ์˜ฌ๋ผ์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๊ฐ€ AWS S3, GCS์™€ ๊ฐ™์€ Storage์— ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋ฉด์„œ, ์–ด๋–ค ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ํ…Œ์ด๋ธ”์— ํฌํ•จ๋˜๋Š”์ง€๋ฅผ ๊ณ„์†ํ•ด์„œ ์ •์˜ํ•ด์ฃผ๋Š” ์ผ์€

๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์šธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ์˜ ๋ถˆ์ผ์น˜(inconsistency)๊นŒ์ง€๋กœ ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ "์ด ํ…Œ์ด๋ธ”์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€"๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ์ค€ํ™” ๋œ ๋ฐฉ๋ฒ•์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

 


 

2๏ธโƒฃ  "Hive" Table Format์˜ ์‹œ๋Œ€

Hadoop์„ ์‚ฌ์šฉํ•˜๋˜ ๋•Œ MapReduce๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Java๋กœ ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต๊ฒŒ Job์„ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด SQL์„ MapReduce job์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ธ Hive๊ฐ€ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

 

SQL์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ Hadoop ์Šคํ† ๋ฆฌ์ง€์— ์žˆ๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ํ…Œ์ด๋ธ”์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€์— ๋Œ€ํ•œ ์ฒด๊ณ„์™€ ํ…Œ์ด๋ธ”์„ ์ถ”์ (tracking)ํ•˜๋Š”

Hive Table Format๊ณผ Hive Metastore๊ฐ€ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

Hive Table Format์€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ(prefix)์— ์žˆ๋Š” ํŒŒ์ผ๋“ค๋กœ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์…˜์€ ์„œ๋ธŒ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋‚˜๋‰˜์–ด์กŒ์Šต๋‹ˆ๋‹ค.

 

Hive metastore๋Š” ์ด๋Ÿฌํ•œ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ถ”์ ํ•ด์„œ Query Engine์ด Query์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋”” ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํด๋”(๋””๋ ‰ํ† ๋ฆฌ)๋กœ ๊ตฌ๋ถ„๋˜๋Š” ํ…Œ์ด๋ธ”๊ณผ, ์„œ๋ธŒ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ตฌ๋ถ„๋˜๋Š” ํŒŒํ‹ฐ์…˜

 

 

๊ทธ๋ ‡๋‹ค๋ฉด Hive Table Format์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๐ŸŸข Hive Table Format์˜ ์žฅ์ 

  • ํŒŒํ‹ฐ์…”๋‹(Partitioning)๊ณผ ๋ฒ„์ผ“ํŒ…(bucketing) ์ง€์› → ํ…Œ์ด๋ธ”์„ Full Scan ํ•˜์ง€ ์•Š๊ณ  ํšจ์œจ์ ์œผ๋กœ Queryํ•  ์ˆ˜ ์žˆ๋‹ค.
  • File Format๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • ํ…Œ์ด๋ธ”์˜ ํŒŒํ‹ฐ์…˜์— ๋Œ€ํ•ด์„œ ์›์ž์ (atmoic) ๋ณ€ํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • ๋งŽ์€ ๊ณณ์—์„œ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

๐Ÿ”ด Hive Table Format์˜ ๋‹จ์ 

  • Partition ๋‹จ์œ„๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ File ํ•˜๋‚˜๋งŒ ์›์ž์ ์œผ๋กœ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์—ฌ๋Ÿฌ Partition์„ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์—์„œ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์“ฐ๋Š” ์ž‘์—…์ด ๋ถˆ์•ˆ์ •์ ์ด๋‹ค.
  • ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ๋ชฉ๋ก์„ ์ฝ์–ด์˜ค๋Š” ์ž‘์—…๋„ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด๋‹ค(=๋А๋ ค์ง„๋‹ค)
  • ํŒŒํ‹ฐ์…”๋‹์ด ์ ์šฉ๋œ ์ปฌ๋Ÿผ์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์–ด์•ผ Full Table Scan์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ…Œ์ด๋ธ” ํ†ต๊ณ„ ์ˆ˜์ง‘์ด ๋ณ„๋„๋กœ ์ด๋ค„์ ธ ์˜ค๋ž˜๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ ์ตœ์ ํ™”๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.
    (ANALYZE TABLE ... COMPUTE STATISTICS ๊ฐ™์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ†ต๊ณ„๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค)
  • Object Storage์—์„œ ๋™์ผํ•œ prefix์— ๋Œ€ํ•œ ๋™์‹œ ๋‹ค๋ฐœ์  ์š”์ฒญ์„ ์ œํ•œ(throttling)ํ•˜๋ฉด์„œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค.

๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก, ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์ปค์กŒ๊ธฐ ๋•Œ๋ฌธ์—

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด Table Format์ด ํ•„์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

 


 

3๏ธโƒฃ  ์ƒˆ๋กœ์šด Table Format์ด ํ•„์š”ํ•ด์ง€๋‹ค

Hive Table Format์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Hive Table์—์„œ ๊ทผ๋ณธ์ ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋‚ด์šฉ์ด๋ผ ์ •์˜ํ•˜์ง€, ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋ฐ˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

 

Apache Iceberg, Apache Hudi, Delta Lake์™€ ๊ฐ™์€ ํ˜„๋Œ€ Table Format์€

ํ…Œ์ด๋ธ”์„ ํŒŒ์ผ ๋ชฉ๋ก์œผ๋กœ ์ •์˜ํ•˜๊ณ , ์—”์ง„์—๊ฒŒ ์–ด๋–ค ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์–ด๋–ค ํŒŒ์ผ๋กœ ํ…Œ์ด๋ธ”์ด ์ด๋ค„์กŒ๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ฌด์—‡์ด ํ…Œ์ด๋ธ”์ธ์ง€ ์ •์˜๋ฅผ ๋”์šฑ ์„ธ๋ถ„ํ™”ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

  1. ACID ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  2. ์—ฌ๋Ÿฌ๋ช…์ด ์“ฐ๊ธฐ๋ฅผ ํ•ด๋„ ์•ˆ์ „ํ•œ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  3. ํ…Œ์ด๋ธ”์˜ ํ†ต๊ณ„ ์ •๋ณด์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋” ํšจ์œจ์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

 


 

์ด๋ฒˆ ๊ธ€์—์„œ Table Format์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋ฉด์„œ, ๋ฌธ๋“ ์ง€๋‚œ 1ํŽธ์—์„œ์˜ ๋„์„œ๊ด€ ๋น„์œ ๊ฐ€ ์ž˜๋ชป ๋œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ• ์ง€๊นŒ์ง€๋Š” ๋ฐฉํ–ฅ์„ฑ์ด ์žกํžˆ์ง€ ์•Š๋Š” ์ดํ•ด ์ˆ˜์ค€ ์ƒํƒœ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์•Œ์•„๊ฐˆ์ˆ˜๋ก ๋” ๋ชจ๋ฅด๊ฒ ๋Š” ๊ฒƒ์ด ๊ณต๋ถ€๊ฒ ์ง€์š”. ์ด์ œ ์ •๋ง Apahce Iceberg์— ๋Œ€ํ•ด ๋‹ค์Œ ๊ธ€์—์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.