๐Lakehouse๊ฐ์
๐ณ๏ธโ๐ [๊ถ๊ธํ์ ]
๐[๋ชฉ์ฐจ]
Lakehouse๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค(Data Warehouse) ์ ๋ฐ์ดํฐ ๋ ์ดํฌ(Data Lake) ์ ์ฅ์ ์ ๊ฒฐํฉํ ์ฐจ์ธ๋ ๋ฐ์ดํฐ ์ํคํ ์ฒ์ด๋ค. ์ด๋ฆ ๊ทธ๋๋ก "Lake(ํธ์) + House(์ฐฝ๊ณ )"์ ๊ฐ๋ ์ผ๋ก, ์ ์ฐํ ์ ์ฅ์์ ๊ฐ๋ ฅํ ๋ถ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ ๊ณตํ๊ณ ์ ๋ฑ์ฅํ๋ค.
Lakehouse๋ ํนํ ๋ฐ์ดํฐ ์์ง๋์ด๋ง, ML, BI๋ฅผ ํ๋์ ํ๋ซํผ์์ ํตํฉํ๋ ค๋ ์กฐ์ง์ ๋งค์ฐ ์ ์ฉํ๋ค.
Data Lake๋ ๊ตฌ์กฐํ๋์ง ์์ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ดํ๊ฒ ์ ์ฅํ ์ ์์ง๋ง, ๋ฐ์ดํฐ ํ์ง ๊ด๋ฆฌ, ์คํค๋ง ๊ด๋ฆฌ, ์ฟผ๋ฆฌ ์ฑ๋ฅ์์ ํ๊ณ๊ฐ ์์๋ค.
Data Warehouse๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ถ์ํ ์ ์์ง๋ง, ์ ์ฅ ๋น์ฉ์ด ๋๊ณ ๋น์ ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฝํ๋ค.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด Lakehouse Architecture์ด๋ค.
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| ๋จ์ผ ์ ์ฅ์ | ์ ํ, ๋ฐ์ ํ, ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํ๋์ ์คํ ๋ฆฌ์ง(S3, HDFS ๋ฑ)์ ์ ์ฅ |
| ์คํ ํฌ๋งท | Parquet, ORC, Iceberg, Delta Lake ๋ฑ ์คํ ํฌ๋งท ์ฌ์ฉ |
| ํธ๋์ญ์ ์ง์ | ACID ํธ๋์ญ์ ์ง์์ผ๋ก ์์ ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ |
| ์นดํ๋ก๊ทธ ๊ด๋ฆฌ | Hive Metastore, Unity Catalog, AWS Glue ๋ฑ์ผ๋ก ํ ์ด๋ธ ๊ด๋ฆฌ |
| ๊ณ ์ฑ๋ฅ ์ฟผ๋ฆฌ ์์ง | Trino, Apache Spark, Dremio ๋ฑ์ผ๋ก ๋น ๋ฅธ ์ฟผ๋ฆฌ ์คํ ๊ฐ๋ฅ |
| ML/BI ํตํฉ | ML ๋ชจ๋ธ ํ๋ จ๊ณผ BI ๋ถ์ ๋ชจ๋ ๊ฐ์ ๋ฐ์ดํฐ ์์ค์์ ์ํ ๊ฐ๋ฅ |
| ํญ๋ชฉ | Data Lake | Data Warehouse | Lakehouse |
|---|---|---|---|
| ์ ์ฅ ํฌ๋งท | Parquet, JSON | Columnar (Proprietary) | Parquet + Table Format (Iceberg ๋ฑ) |
| ์ฟผ๋ฆฌ | ๋๋ฆผ | ๋น ๋ฆ | ๋น ๋ฆ |
| ํธ๋์ญ์ | ์์ | ์์ | ์์ |
| ML ์ง์ | ๊ฐํจ | ์ฝํจ | ๊ฐํจ |
| ์คํค๋ง ๊ฐ์ | ์ฝํจ | ๊ฐํจ | ๊ฐํจ |
๋ ์ดํฌํ์ฐ์ค(Lakehouse) ์ํคํ ์ฒ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค(DW) ์ ๋ฐ์ดํฐ ๋ ์ดํฌ(Data Lake) ์ ์ฅ์ ์ ๊ฒฐํฉํ ์ฐจ์ธ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ตฌ์กฐ์ด๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐํ๊ฒ ์ ์ฅํ๋ฉด์๋, ๋ถ์ยทBIยท๋จธ์ ๋ฌ๋ ์ฉ๋๋ก ํ์ฉ ๊ฐ๋ฅํ ์ผ๊ด์ฑ๊ณผ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
| ๊ตฌ์ฑ ์์ | ์ค๋ช |
|---|---|
| Object Storage | ์ ๋ ดํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ์ฅ์ (S3, MinIO ๋ฑ) |
| Table Format | Iceberg, Delta Lake, Hudi โ ACID ํธ๋์ญ์ , ์ค๋ ์ท, ์คํค๋ง ์งํ ๋ฑ ์ง์ |
| Catalog | ํ ์ด๋ธ ๋ฐ ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ (HMS, Glue, Nessie ๋ฑ) |
| Query Engine | ๋ํํ ์ฟผ๋ฆฌ ๋ฐ ๋ถ์ ์ฒ๋ฆฌ (Trino, Spark, Flink ๋ฑ) |
| BI/ML ๋๊ตฌ | Tableau, Superset, Jupyter, Pandas ๋ฑ๊ณผ ์ฐ๊ฒฐ ๊ฐ๋ฅ |
| ํน์ง | ์ค๋ช |
|---|---|
| ACID ์ง์ | Iceberg ๋ฑ์ ํ ์ด๋ธ ํฌ๋งท์ด ํธ๋์ญ์ , ๋กค๋ฐฑ ๋ฑ ์ ๊ณต |
| ์คํค๋ง ์งํ | ์ปฌ๋ผ ์ถ๊ฐ/๋ณ๊ฒฝ ๋ฑ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด ์์ ํ๊ฒ ๊ฐ๋ฅ |
| ํ์ ํผํฉ | ์ ํ/๋ฐ์ ํ/๋น์ ํ ๋ฐ์ดํฐ ํผํฉ ์ฒ๋ฆฌ |
| ๊ณ ์ ์ฟผ๋ฆฌ | ์ปฌ๋ผ ํ๋ฃจ๋, ํํฐ์ ๋, Z-order ์ ๋ ฌ ๋ฑ์ผ๋ก ์ต์ ํ |
| ์คํ ํฌ๋งท | Parquet, ORC, Avro ๋ฑ์ ํ์ค ํฌ๋งท ์ฌ์ฉ ๊ฐ๋ฅ |
| ์คํ | ์ค๋ช |
|---|---|
| MinIO + Iceberg + Hive Metastore + Trino | ์คํ์์ค๋ก ๋ ์ดํฌํ์ฐ์ค ๊ตฌ์ถ, ๋น์ฉ ํจ์จ ๋์ |
| AWS S3 + Glue + Athena / EMR + Iceberg | ์๋ฒ๋ฆฌ์ค ๋๋ Spark ๊ธฐ๋ฐ ๊ณ ๋ํ ํ๊ฒฝ |
| Databricks (Delta Lake) | ์์ ์ ์์ฑ๋ ๋์ง๋ง ๋น์ฉ ์์ |
| ์ฅ์ | ๋จ์ |
|---|---|
| ๋น์ฉ ์ ๊ฐ (object storage ๊ธฐ๋ฐ) | ์ด๊ธฐ ๊ตฌ์ฑ ๋ณต์ก๋ |
| ํ์ฅ์ฑ ์ฐ์ | ์ฑ๋ฅ ํ๋ ํ์ |
| ๋ค์ํ ๋๊ตฌ์ ์ฐ๊ณ | Table Format ์ดํด ํ์ |
| ๋ฐ์ดํฐ ํ์ง ๋ฐ ๊ฑฐ๋ฒ๋์ค ํฅ์ |
๋ ์ดํฌํ์ฐ์ค(Lakehouse) ์ํคํ ์ฒ์์ ์นดํ๋ก๊ทธ(Catalog) ๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ฟผ๋ฆฌ ์์ง๊ณผ์ ์ฐ๊ฒฐ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ํต์ฌ ๊ตฌ์ฑ ์์๋ค.
๋ ์ดํฌํ์ฐ์ค ์นดํ๋ก๊ทธ๋ ๋ฐ์ดํฐ ๋ ์ดํฌ์ ์ ์ฅ๋ ํ ์ด๋ธ, ๋ทฐ, ํํฐ์ , ์คํค๋ง ๋ฑ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ์ง๋ง, S3๋ HDFS ๊ฐ์ ์ค๋ธ์ ํธ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก ํ๋ค.
Iceberg๋ ๋ค์ํ ์นดํ๋ก๊ทธ ๋ฐฑ์๋๋ฅผ ์ง์ํ๋ฉฐ, ์ด ์ค Hive Metastore(HMS), REST, JDBC, Nessie ๋ฑ์ด ์์ฃผ ์ฌ์ฉ๋๋ค.
Iceberg ํ ์ด๋ธ์ ์๋ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๊ด๋ฆฌ๋๋ค
์นดํ๋ก๊ทธ (Catalog)
โโโ ๋ฐ์ดํฐ๋ฒ ์ด์ค (Namespace / DB)
โโโ ํ
์ด๋ธ (Iceberg Table)
โโโ ์ค๋
์ท, ๋งค๋ํ์คํธ, ๋ฐ์ดํฐ ํ์ผ ๋ฑ
| ์ ํ | ์ค๋ช | ์ฌ์ฉ ์์ |
|---|---|---|
| HiveCatalog | Hive Metastore๋ฅผ ์ฌ์ฉ | Trino, Spark์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ |
| HadoopCatalog | ํ์ผ ์์คํ ๊ธฐ๋ฐ ์นดํ๋ก๊ทธ | Hive ์์ด ์ฌ์ฉ ๊ฐ๋ฅ |
| RESTCatalog | REST API๋ก ๊ตฌํ๋ Iceberg ๋ค์ดํฐ๋ธ ์นดํ๋ก๊ทธ | ํด๋ผ์ฐ๋ ํ๊ฒฝ, Nessie ์ฐ๋ |
| JDBCCatalog | JDBC ์ฐ๊ฒฐ๋ก RDB์ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ | PostgreSQL, MySQL ๋ฑ |
| NessieCatalog | Git์ฒ๋ผ ๋ธ๋์น/๋ฒ์ ๊ด๋ฆฌ | ๊ณ ๊ธ ๊ฑฐ๋ฒ๋์ค ๋ฐ ํ์ ์ ์ฌ์ฉ |
์์: HiveCatalog ๊ตฌ์ฑ (Trino + HMS + MinIO)
connector.name=iceberg iceberg.catalog.type=hive hive.metastore.uri=thrift://hive-metastore:9083 iceberg.file-format=parquet hive.s3.endpoint=http://minio:9000 hive.s3.aws-access-key=minioadmin hive.s3.aws-secret-key=minioadmin hive.s3.path-style-access=true์ด ๊ตฌ์ฑ์ Trino๊ฐ Iceberg ํ ์ด๋ธ์ Hive Metastore๋ฅผ ํตํด ์ธ์ํ๊ณ , ๋ฐ์ดํฐ๋ MinIO(S3) ์ ์ ์ฅ๋๋ค.
์์: HadoopCatalog ๊ตฌ์ฑ (Spark ๋จ๋ )
spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog spark.sql.catalog.my_catalog.type=hadoop spark.sql.catalog.my_catalog.warehouse=s3a://my-bucket/warehouse์ด ๋ฐฉ์์ Hive ์์ด๋ Iceberg๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค/ํ ์ด๋ธ ์ ๋ณด๋ฅผ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํ๋ค.
| ๋ชฉ์ | ์ถ์ฒ ์นดํ๋ก๊ทธ |
|---|---|
| Hive์ ์ฐ๋ (Trino/Spark ๊ณต์ฉ) | HiveCatalog |
| Hive ์์ด ๊ฐ๋จํ๊ฒ | HadoopCatalog |
| ๋ฐ์ดํฐ ๋ธ๋์น/๋ฒ์ ๊ด๋ฆฌ | NessieCatalog |
| ์ปค์คํ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ์ ์ฌ์ฉ | JDBCCatalog |
HiveCatalog๋ Apache Iceberg์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์นดํ๋ก๊ทธ ์ค ํ๋๋ก, Hive Metastore(HMS) ๋ฅผ ๋ฐฑ์๋๋ก ์ฌ์ฉํ๋ ์นดํ๋ก๊ทธ์ด๋ค. HiveCatalog๋ ๊ธฐ์กด Hive ํ๊ฒฝ์ ๊ทธ๋๋ก ํ์ฉํ๋ฉด์ Iceberg์ ๊ธฐ๋ฅ(์ค๋ ์ท, ํธ๋์ญ์ , ์คํค๋ง ์งํ ๋ฑ)์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
Hive Metastore
โโโ Database (Namespace)
โโโ Table (Iceberg Table)
โโโ Metadata ํ์ผ (S3 ๋๋ HDFS)
โโโ Data ํ์ผ (Parquet, ORC ๋ฑ)
Hive Metastore๋ ํ ์ด๋ธ์ ๋ ผ๋ฆฌ ์ ๋ณด(์ด๋ฆ, ์์น) ๋ง ์ ์ฅ
Iceberg์ ๋ฉํ๋ฐ์ดํฐ ํ์ผ๋ค์ ์คํ ๋ฆฌ์ง(S3/MinIO ๋ฑ)์ ์ ์ฅ
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| ํธํ์ฑ | Trino, Spark, Flink ๋ฑ ๋ค์ํ ์์ง์์ ๊ณตํต์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ |
| ACID ํธ๋์ญ์ | Iceberg ํฌ๋งท์ด ์ ๊ณต, HMS๋ ๋จ์ ๋ฉํ ์ ์ฅ |
| S3 ํธํ | MinIO, AWS S3, HDFS ๋ฑ ๋ค์ํ ์ ์ฅ์์ ์ฐ๊ฒฐ ๊ฐ๋ฅ |
| ์์กด์ฑ | HMS ์๋น์ค๊ฐ ๋ฐ๋์ ํ์ํจ |
HiveCatalog ์์ฒด๊ฐ HDFS๋ฅผ ๋ฐ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋ค. HiveCatalog๋ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ์๋ก Hive Metastore(HMS) ๋ฅผ ์ฌ์ฉํ๊ณ ,
๋ฐ์ดํฐ ํ์ผ๊ณผ Iceberg ๋ฉํ๋ฐ์ดํฐ ํ์ผ์ HDFS, S3, MinIO ๋ฑ ์ํ๋ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ ์ ์๋ค.
| ๊ตฌ์ฑ ์์ | ์ ์ฅ ์์น | ์ค๋ช |
|---|---|---|
| Hive Metastore (HMS) | RDB (MySQL/PostgreSQL ๋ฑ) | ํ ์ด๋ธ ์ด๋ฆ, ์์น, ์คํค๋ง ๋ฑ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ |
| Iceberg ๋ฉํ๋ฐ์ดํฐ ํ์ผ | HDFS ๋๋ S3/MinIO ๋ฑ | .metadata.json, ์ค๋
์ท ๋ฑ Iceberg ํน์ ์ ์ ๋ณด |
| ์ค์ ๋ฐ์ดํฐ ํ์ผ | HDFS ๋๋ S3/MinIO ๋ฑ | Parquet/ORC ๋ฑ์ ํฌ๋งท์ผ๋ก ์ ์ฅ๋จ |