Data Lake & Big Data
Schema-on-Read, Zone ๊ตฌ์กฐ, Hadoop/Spark, Data Lakehouse
๐ ์๋ฆฌ์ฆ ๋ค๋น๊ฒ์ด์ โ
| ์ด์ | ํ์ฌ | ๋ค์ |
|---|---|---|
| DW System | Data Lake | ETL & Pipeline |
โ ์๋ฆฌ์ฆ ๋ชฉ์ฐจ
๐ฏ Data Lake๋?โ
Data Lake: ์ ์ ๋์ง ์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์๋ณธ ๊ทธ๋๋ก ์ ์ฅํ๋ ์ค์ ์ ์ฅ์
ํต์ฌ ํน์ง:
- ์๋ณธ ๋ฐ์ดํฐ ๊ทธ๋๋ก ์ ์ฅ (Schema-on-Read)
- ์ ํ/๋ฐ์ ํ/๋น์ ํ ๋ฐ์ดํฐ ๋ชจ๋ ์์ฉ
- ์ ๋ ดํ ์คํ ๋ฆฌ์ง์ ๋์ฉ๋ ์ ์ฅ
- ๋์ค์ ํ์ํ ๋ ๋ณํ/๋ถ์
๐ DW vs Data Lakeโ
| ๊ตฌ๋ถ | Data Warehouse | Data Lake |
|---|---|---|
| ๋ฐ์ดํฐ ํํ | ์ ํ (๊ตฌ์กฐํ) | ์ ํ/๋ฐ์ ํ/๋น์ ํ |
| ์คํค๋ง | Schema-on-Write | Schema-on-Read |
| ์ฒ๋ฆฌ ์์ | ์ ์ฌ ์ ๋ณํ (ETL) | ์ฌ์ฉ ์ ๋ณํ (ELT) |
| ์ ์ฅ ๋น์ฉ | ๋์ | ๋ฎ์ |
| ์ฌ์ฉ์ | ๋น์ฆ๋์ค ๋ถ์๊ฐ | ๋ฐ์ดํฐ ์์ง๋์ด, ๊ณผํ์ |
| ์ฟผ๋ฆฌ ์ฑ๋ฅ | ๋น ๋ฆ (์ต์ ํ๋จ) | ์๋์ ์ผ๋ก ๋๋ฆผ |
| ๋ฐ์ดํฐ ํ์ง | ๋์ (์ ์ ๋จ) | ๋ค์ํจ (์๋ณธ) |
๐ Schema-on-Write vs Schema-on-Readโ
| ๊ตฌ๋ถ | Schema-on-Write (DW) | Schema-on-Read (Data Lake) |
|---|---|---|
| ์คํค๋ง ์ ์ | ์ ์ฅ ์ | ์กฐํ ์ |
| ์ ์ฐ์ฑ | ๋ฎ์ | ๋์ |
| ๋ฐ์ดํฐ ํ์ง | ๋์ | ๋ค์ํจ |
| ์ ์ฅ ์๋ | ๋๋ฆผ (๋ณํ) | ๋น ๋ฆ (์๋ณธ ์ ์ฅ) |
| ์ฟผ๋ฆฌ ์๋ | ๋น ๋ฆ | ๋๋ฆผ |
๐๏ธ Data Lake ์ํคํ ์ฒโ
Zone ๊ตฌ์กฐโ
Data Lake๋ ๋ณดํต ์ฌ๋ฌ ์์ญ(Zone)์ผ๋ก ๋๋จ.
๐ง Big Data ๊ธฐ์ ์คํโ
์ ์ฅ (Storage)โ
| ๊ธฐ์ | ์ค๋ช |
|---|---|
| HDFS | Hadoop Distributed File System, ๋ถ์ฐ ํ์ผ ์์คํ |
| Amazon S3 | ํด๋ผ์ฐ๋ ์ค๋ธ์ ํธ ์คํ ๋ฆฌ์ง |
| Azure Data Lake Storage | Azure ๋ฐ์ดํฐ ๋ ์ดํฌ ์คํ ๋ฆฌ์ง |
| Google Cloud Storage | GCP ์ค๋ธ์ ํธ ์คํ ๋ฆฌ์ง |
์ฒ๋ฆฌ (Processing)โ
| ๊ธฐ์ | ์ ํ | ์ค๋ช |
|---|---|---|
| Hadoop MapReduce | ๋ฐฐ์น | ๋์ฉ๋ ๋ฐฐ์น ์ฒ๋ฆฌ (๋ ๊ฑฐ์) |
| Apache Spark | ๋ฐฐ์น/์คํธ๋ฆผ | ์ธ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ, ๋น ๋ฆ |
| Apache Flink | ์คํธ๋ฆผ | ์ค์๊ฐ ์คํธ๋ฆผ ์ฒ๋ฆฌ |
| Apache Kafka | ์คํธ๋ฆผ | ๋ฉ์์ง ํ, ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ |
์ฟผ๋ฆฌ (Query)โ
| ๊ธฐ์ | ์ค๋ช |
|---|---|
| Apache Hive | SQL on Hadoop, ๋ฐฐ์น ์ฟผ๋ฆฌ |
| Presto/Trino | ๋ถ์ฐ SQL ์์ง, ๋น ๋ฅธ ์ฟผ๋ฆฌ |
| Apache Drill | ์คํค๋ง ์๋ ์ฟผ๋ฆฌ |
| Amazon Athena | S3 ์ ์๋ฒ๋ฆฌ์ค SQL |
๐ Hadoop ์์ฝ์์คํ โ
โก Apache Sparkโ
ํ์ฌ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ง์.
ํน์ง:
- ์ธ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ โ MapReduce๋ณด๋ค ์ต๋ 100๋ฐฐ ๋น ๋ฆ
- ๋ฐฐ์น + ์คํธ๋ฆผ ์ฒ๋ฆฌ ํตํฉ
- Python, Scala, Java, R, SQL ์ง์
๊ตฌ์ฑ ์์:
| ์ปดํฌ๋ํธ | ์ฉ๋ |
|---|---|
| Spark Core | ๊ธฐ๋ณธ ์์ง, RDD |
| Spark SQL | ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ |
| Spark Streaming | ์ค์๊ฐ ์คํธ๋ฆผ ์ฒ๋ฆฌ |
| MLlib | ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| GraphX | ๊ทธ๋ํ ์ฒ๋ฆฌ |
# PySpark ์์
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("example").getOrCreate()
# CSV ์ฝ๊ธฐ
df = spark.read.csv("s3://bucket/data.csv", header=True)
# ๋ณํ
result = df.filter(df.age > 30).groupBy("department").count()
# ์ ์ฅ
result.write.parquet("s3://bucket/output/")
๐ข Data Lakehouseโ
Data Lakehouse: Data Lake + Data Warehouse ์ฅ์ ๊ฒฐํฉ
| ํน์ง | ์ค๋ช |
|---|---|
| ACID ์ง์ | Data Lake ์์์ ํธ๋์ญ์ |
| ์คํค๋ง ๊ด๋ฆฌ | ๋ฉํ๋ฐ์ดํฐ ๋ ์ด์ด |
| ์ฑ๋ฅ ์ต์ ํ | ์ธ๋ฑ์ฑ, ์บ์ฑ |
| ํตํฉ ์ ๊ทผ | BI ๋๊ตฌ์์ ์ง์ ์ฟผ๋ฆฌ |
์ฃผ์ ๊ธฐ์ :
| ๊ธฐ์ | ์ค๋ช |
|---|---|
| Delta Lake | Databricks, Spark ๊ธฐ๋ฐ |
| Apache Iceberg | Netflix ์คํ์์ค |
| Apache Hudi | Uber ์คํ์์ค |
โ๏ธ ํด๋ผ์ฐ๋ Data Lake ์๋น์คโ
| ํด๋ผ์ฐ๋ | ์๋น์ค | ์ค๋ช |
|---|---|---|
| AWS | S3 + Athena + Glue | S3 ๊ธฐ๋ฐ, ์๋ฒ๋ฆฌ์ค ์ฟผ๋ฆฌ |
| Azure | ADLS + Synapse | ํตํฉ ๋ถ์ ์๋น์ค |
| GCP | GCS + BigQuery | ์๋ฒ๋ฆฌ์ค DW |
| Databricks | Multi-cloud | Spark ๊ธฐ๋ฐ ํตํฉ ํ๋ซํผ |
๐ ์๋ฆฌ์ฆ ๋ค๋น๊ฒ์ด์ โ
| ์ด์ | ๋ค์ |
|---|---|
| Data Warehouse System | ETL & Data Pipeline |