๐ ํด๋น ํฌ์คํ ์ YouTube GeekNews ์ฑ๋์ ๋ฐ์ดํฐ ์ธํ๋ผ ๊ฐ์ ๋ด์ฉ, ํ์ฉํธ๋์ SlideShare ์ฌ๋ผ์ด๋์ ๊ธฐ๋ฐํด ์ ๊ฐ ์ฌ๊ตฌ์ฑํ์ฌ ์์ฑํจ์ ์๋ ค๋๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์ ๋ฒ ํฌ์คํ ์์ ์ดํด๋ณธ Ingestion & Transformation ๋จ๊ณ์ ๋ ๋ค๋ฅธ ๋๊ตฌ์ธ Apache Spark Platform์ ๋ํด ์์๋ณด๋ ค๊ณ ํ๋ค. PySpark์ ๋ํด ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ๊ณ ์ด๋์ ๋ ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฒ์ ํฌ์คํ ํ ์ ์ด ์๋ค. ๊ทธ๋ฐ๋ฐ ์ญ์ ๊ณต์ ๋ฌธ์๋ง์ผ๋ก ์ดํดํ ๊ฒ์ด ๋ชจ๋ ๊ฑธ ๋ด๊ฐ ๋ค ์ดํดํ ๊ฒ์ด ์๋์๋ค.. ๊ทธ๋์ 2๊ฐ์ง ๋งค์ฒด๋ฅผ ํตํด ๋ ๊ณต๋ถ๋ฅผ ํ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ํฌ์คํ ํ๋ ค ํ๋ค.
์ ๋นจ๊ฐ์ ๋ค๋ชจ์นธ์ ์์๋ค์ ๊ฐ๊ฐ ์๊ฐํ๊ธฐ ์ ์ ์ด ์์๋ค์ธ Spark Platform, Python Libs, Batch Query Engine์ ํ์ดํ๋ผ์ธ ์์์์ผ๋ก ์ด์ ํฌ์คํ ๋ง์ง๋ง์ ๋ฐฐ์ ๋ Workflow Manager๋ณด๋ค ์์ ์์น์ ์กด์ฌํ๋ค. ์๋ํ๋ฉด ์์ผ๋ก ์๊ฐํ Spark Platform, Python Libs, Batch Query Engine์ ๋ฐ์ดํฐ ๋ถ์์ ์ฝ๋๋ก ์ง๊ณ ๋ถ์ํด๋ณด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ด๊ณ Workflow Manager๋ค์ด ์์ ๋ถ์ํ๊ธฐ ์ํด ์์ฑํ ์ฝ๋๋ค์ ์ค์ง์ ์ธ task๋ก์ ์คํ, ์ํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋ณธ ํฌ์คํ ์์ ์๊ฐ๋ ์ปจํ ์ธ ๋ค์ Workflow Manager ๋ค์์ผ๋ก ๊ฒ์๋์ง๋ง ์ค์ ํ์ดํ๋ผ์ธ ์์๋ [Workflow Manager โก๏ธ Spark Platform, Python Libs, Batch Query Engine] ์์ ๋ช ์ฌํ์.
Spark Platform
์ํ์น ์คํํฌ๋ ๋์ฉ๋์ ๋ฐ์ดํฐ ๋๋ task๋ค์ ์ฌ๋ฌ ๋์ ์๋ฒ์ ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด์ ๋น ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๋๋ก ํด์ฃผ๋ ํ๋ ์์ํฌ๋ฅผ ์๋ฏธํ๋ค. Spark๊ฐ ์ถ์๋๊ธฐ ์ด์ ์ ๊ทธ๋๋ง ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ ์ ์์๋ ๊ฒ์ด Hadoop์ MapReduce์ด๋ค. ์ฐ์ ์ด ๋์ ์ฐจ์ด์ ๋ถํฐ ํ๋ก ์ดํด๋ณด์.
์ฝ์ด๋ณด๋ฉด ์๊ฒ ์ง๋ง ์๋์ ์ธ ์ธก๋ฉด์์ Spark๊ฐ ์๋์ ์ผ๋ก ๋น ๋ฅด๋ค. ๋ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ธก๋ฉด์์ ๋งต๋ฆฌ๋์ค๋ Batch Processing(task๋ค์ ๋ฌถ์ด์ ์ฌ๋ฌ ๋์ ์๋ฒ๋ก ํ ๋นํ๊ณ ์ฒ๋ฆฌํ ํ ๋ค์ ํฉ์น๋ ๊ณผ์ )๋ง์ ์ ๊ณตํ๋ ๋ฐ๋ฉด ์คํํฌ๋ ์ค์๊ฐ(real-time), ๊ทธ๋ํ(graph) ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ ํธ์์์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ฝ๋ค๊ณ ํ๋ค. ๋ง์ง๋ง์ผ๋ก ๊ฐ์ฅ ์ค์ํ ํน์ง์ด ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑํ๋ ์คํํฌ์ ํน์ง์ธ๋ฐ, ์ด๊ฒ์ ์คํํฌ๊ฐ ์ด๋ค ์์ผ๋ก ๋์ํ๋์ง ์ดํดํ๊ธฐ ์ํ ๊ทผ๊ฐ์ด ๋๋ค. ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋์์ ์ดํด๋ณด์.
1. MapReduce๋ ๋ญ๊ฐ ๋ฌธ์ ์์๊น?
์คํํฌ์ RDD์ ๋ํด ์ดํดํ๊ธฐ ์ํด์๋ ํ์ฉํธ๋์ ์ฌ๋ผ์ด๋๋ฅผ ๋งค์ฐ ์ฐธ๊ณ ํ๋ค. ์ดํดํ๊ธฐ ๋๋ฌด ์ฝ๊ฒ ์ค๋ช ํด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํ๋ค! ์คํํฌ๋ฅผ ์ดํดํ๊ธฐ ์ ์ ๋งต๋ฆฌ๋์ค๊ฐ ๊ฐ๋ ํ๊ณ์ ๋ถํฐ ์ดํด๋ณด์.
- ๋จธ์ ๋ฌ๋, ๊ทธ๋ํ์ ๊ฐ์ ๋ณต์กํ๊ณ Multi-Stageํ ์ฒ๋ฆฌ๋ฅผ ์ ํ์ง ๋ชปํจ
- Interactiveํ ์ฟผ๋ฆฌ์ ad-hocํ ์ฟผ๋ฆฌ๋ฅผ ์ ์ฒ๋ฆฌํ์ง ๋ชปํจ
์ฌ๊ธฐ์ ํ์๋ Interactive, ad-hocํ ์ฟผ๋ฆฌ์ ๋ํ ์ ์๋ฅผ ์ ๋ชฐ๋ผ์ ์ฐพ์๋ณด๊ณ ์ดํดํ ๋ด์ฉ์ ๊ฐ์ด ์๊ฐํ๋ ค ํ๋ค.
- Interactiveํ ์ฟผ๋ฆฌ : Stream Processing์ ์ํ ์๋ก์ด ์ฟผ๋ฆฌ ํํ. Stream Processing์ด๋, ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์ดํ๋ฆฌ์ผ์ด์
์ด ์ฝ๊ฒ ์ด์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฏธํ๋ค.
- Interactiveํ ์ฟผ๋ฆฌ๋ Stream Processing์ ๊ฐ๋ณ๊ฒ ํด์ค๋ค. ์ฆ, Stream Processing์ ํ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ธ๋ฐ, ์ด ๋ ์ธ๋ถ DB๋ ์คํ ๋ฆฌ์ง๋ก ๊ตฌ์ฒดํํ ํ์ ์์ด embedded๋ DB์ฒ๋ผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๊ฐ๋ณ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.
- ad-hocํ ์ฟผ๋ฆฌ : ๋น์ ํ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ฆ์์์ ๋๋ ๋จ๋ฐ์ฑ์ผ๋ก ํ์ํ ์ฟผ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
๋ํ ๋งต๋ฆฌ๋์ค๋ iteration ๊ณผ์ ์ HDFS๋ผ๋ ํ์ผ์์คํ ์ ๋ฃ์๋ค ๋บ๋ค๊ฐ๋ฅผ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ์ ๋๋ ค์ง๊ฒ ๋๋ค. ์ด ๋ ์ฌ๋๋ค์ ๊ทธ๋ฌ๋ฉด ์ต๊ทผ์ ์๋์ ์ผ๋ก ์ ๋ ดํด์ง RAM(RAM์ด๋, ์ฃผ๊ธฐ์ต์ฅ์น๋ก์ ๋ณด์กฐ๊ธฐ์ต์ฅ์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ CPU๊ฐ ์์ ํ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ณต๊ฐ์ ์๋ฏธ)์ ์ด์ฉํ๊ธฐ๋ก ํ๋ค.
2. RAM์ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
๊ทธ๋ ๋ค๋ฉด RAM์ ์ ์ฌ์ฉํ ๊น? ๋ฐ๋ก RAM์ ํ ๋ฒ ์ ์ฅํด๋๊ณ ์ ์ฅํ ๊ฒ์ด ํ์ํ ๋๋ง๋ค ๋นผ์ ์ฐ๋ ์๋ฆฌ๋ฅผ ์ด์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ์ผ๋ง ์ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ Dynamic Programming ์๋ฆฌ์ ๋งค์ฐ ๋น์ทํ๋ค๊ณ ๋๊ผ๋ค. ํ์ง๋ง RAM ์์ฒด๋ฅผ ์ฌ์ฉํ๋ค๊ฐ Fault(๊ณ ์ฅ์ด๋ ์๋ฌ)๊ฐ ๋ฐ์ํ์ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ง์ฝ ํ๋๊ฐ ๊ณ ์ฅ์ด ๋ฌ์ ๋ ๋ค๋ฅธ ๊ฒ๋ค์ด๋ผ๋ ์ด๋ฆฌ๊ธฐ ์ํด์ ๋ณต์ฌ๋ฅผ ํด๋์ Replicating์ ํ๊ฒ๋๋ฉด ์ด Replicating์ ํ๋ ๋์์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ฉ์ถ์ด์ผ๋ง ํ๊ณ ๊ฒฐ๊ตญ ์๋๊ฐ ์ ํ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋, Replicating๋ง์ผ๋ก๋ ์ํจํ ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ Checkpointing์ ํ๋ค๋ฉด ์๋๊ฐ ๋งค์ฐ ๋๋ ค์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์ฌ๋๋ค์ Fault์ ์ ๊ฒฌ๋๊ณ ํจ์จ์ ์ธ ์ด๋ฅธ๋ฐ Fault-tolerant & Efficient ํ RAM ์คํ ๋ฆฌ์ง๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค์ง ๊ณ์์ ์ผ๋ก ๊ณ ๋ฏผํ๋ค.
3. RAM์ธ๋ฐ... ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ RAM?
์ ๋ชฉ ๊ทธ๋๋ก๋ค. RAM์ด๊ธด ํ๋ฐ Read-only, ์ฆ, ์์ ์ด ๋ถ๊ฐํ๊ณ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ RAM์ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ RAM์ธ ์คํํฌ์ RDD(Resilient Distributed Dataset)๊ฐ ํ์ํ๋ค.
4. Spark = RDD + Interface (Interface๋ ๊ฑฐ๋ค ๋ฟ..)
์ฐธ์กฐ ์ฌ๋ผ์ด๋์์ ํ์ฉํธ๋์ ์คํํฌ์ RDD๋ฅผ ๊ฑฐ์ ๋์ผ์ํ๋ฉด์ RDD์ ๋ํ ์ดํด์ ์ค์์ฑ์ ๊ฐ์กฐํ์ ๋ค. ๊ทธ๋ฌ RDD์ ํน์ง๋ค๋ถํฐ ์์๋ณด์.
- ์์ ์ด ๋ถ๊ฐ(Immutable), ํํฐ์ ๋ ๋ ์ฝ๋๋ค์ ์งํฉ(Partitioned collections of records)
- ์คํ ๋ฆฌ์ง์์ RDD๋ก ๋๋ RDD์์ RDD๋ก๋ง ๋ณํ์ด ๊ฐ๋ฅ
์์์ ์ดํด๋ณด์์ง๋ง RDD์ ํน์ฑ์ ์์ ์ด ๋ถ๊ฐํ ์ฆ, ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ Read-only ์ฑ๊ฒฉ์ด๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์๊ฐ ์๋ ๊ฑธ๊น? ์๋๋ค. RDD๋ ๋ณํ๋๋ ๋ชจ์ต๋ค์ ๊ณ์ ๊ธฐ๋กํด์ ๊ณ๋ณด(Lineage)๋ฅผ ๋ง๋ค์ด์ ์ ์ฅํ๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ Fault-tolerant ๊ฐ ๊ฐ๋ฅํด์ง๊ฒ ๋๋ค. RDD๊ฐ ๊ณ๋ณด(Lineage)๋ฅผ ๋ง๋ ๋ค๋ ๊ฒ์ด ์ด๋ค ์๋ฏธ์ผ๊น? ํ๋จ์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํด๋ณด์.
์ด๋์ ๋ณธ ์ ์ด ์์ง ์์๊ฐ? ๋ฐ๋ก Workflow Manager์์ ์ดํด๋ณด์๋ DAG(Directed Acyclic Graph)์ด๋ค. ์ฆ ์ ๊ทธ๋ฆผ์ฒ๋ผ ํน์ ๋ฐ์ดํฐ์ ๋ํด Mapํ ๊ฒฐ๊ณผ, Unionํ ๊ฒฐ๊ณผ, Reduceํ ๊ฒฐ๊ณผ ๋ฑ๋ฑ์ ๋ชจ๋ ๊ณ์์ ์ผ๋ก ๊ธฐ๋กํด์ ์ผ์ข ์ ๊ณ๋ณด(Lineage)๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์ด๋ DAG ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์๊ธฐ ์์ ์ผ๋ก ๋์์ค๋ ์ํ Edge๋ ์ ๋ ์๋ค.
5. RDD์ 2๊ฐ์ง Operator
RDD์๋ 2๊ฐ์ง ์คํผ๋ ์ดํฐ๊ฐ ์กด์ฌํ๋ค. ๋ฐ๋ก Transformations์ Actions์ด๋ค. ์ด์ ๋ํด์ ์์ ์ PySpark ํฌ์คํ ํ ๋๋ ์ ๊น ์๊ฐํ๋ ๊ธฐ์ต์ด ๋๋ค. ๋ค์ ๊ฐ๋ ์ ๋ํด ์์๋ณด์.
- Transformations : ์ด๋ค '๋ณํ' ๋๋ ์ด๋ค '๋ณํ๋ค'์ ์ทจํ ์ง ๊ณ์ ์ค๋นํด๋๋๋ค. ์ฌ๊ธฐ์ ๊ณ๋ณด(Lineage)๊ฐ ์์ฑ๋๋ค.
- Actions : ์ฌ๋ฌ๊ฐ์ Transformations๋ก ๊ตฌ์ฑ๋ Lineage๋ฅผ ์ค์ค์ ์ผ๋ก ์ํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
Transformations ์ Actions ๊ฐ์ ๊ด๊ณ๋ฅผ ๋์ํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
์ ๋์ํ๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง Actions๋ฅผ ์ ์ธํ๊ธฐ ์ ๊น์ง ๋ชจ๋ Transformation๋ค์ด ๋๊ธฐ(?)์ํ๋ก ๋์ด ์๋ค. ์ด๋ฌํ ํน์ฑ์ผ๋ก ์ธํด ์คํํฌ๊ฐ Lazy-Execution ํน์ฑ์ด ์๋ค๊ณ ํ๋ค. ์ด๋ ์์์ด ๋ฐฐ์น๋๊ณ ๋ ๋ฐฐ์น๋ ์ํฉ์ ๋ฏธ๋ฆฌ ๊ณ ๋ คํด์ ์ต์ ์ ๋ฃจํธ๋ก ๊ฐ ์ ์๋๋ก ํด์ค๋ค. ๋ค์ ๋งํด, ์๋ฌด๋ฆฌ ๋ณต์กํ ์ผ์ ๋ง์ด ์์ผ๋ ์ ํ๊ณ ์๊ปด๋๋ค๊ฐ ๋ง์ง๋ง์ ์ต์ ์ ๋ฐฉ๋ฒ์ ์์์ ์ฐพ์์ ์คํํ๋ ์ฅ์ ์ด ๋๋ค.
6. RDD์ Type Dependency
RDD์ Transformations Operator๋ค์๋ map, filter, reduce, groupbykey, join ๋ฑ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. ์ฌ์ฉ๋๋ Transformation์ ๋ฐ๋ผ Type Dependency๊ฐ Narrow, Wide๋ก ๋๋์ด์ง๋ค.
๊ทธ๋ฆผ ์์์๋ Dependency๊ฐ Transformation์ผ๋ก ๋์ด ์๋๋ฐ ๋์ผํ ์๋ฏธ๋ก ํด์ํ๋ฉด ๋ ๋ฏ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ๋ ๊ฐ์ ์ฐจ์ด์ ์ ๋ํด ์ดํด๋ณด์. ํฐ ํน์ง์ ํน์ Transformation์ ์ํํ๋ฉด์ ๋ฐ์ดํฐ์ Shuffle์ด ์ด๋ฃจ์ด์ง๋ ์๋์ง์ ์ฐจ์ด์ด๋ค.
- Narrow Dependency : ํ์ฌ ์๋ฒ(์คํํฌ ์์์ '๋ ธ๋'๋ผ๊ณ ๋ถ๋ฆผ)์์ ์ฒ๋ฆฌํ ์ ์๋ ๋ชจ๋ ์ผ์ ๋ค ์ฒ๋ฆฌํ๋ค. Shuffle์ ์ฌ์ฉํ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์๋๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋น ๋ฅด๋ค.
- Wide Dependency : ๋ชจ๋ ์๋ฒ(์คํํฌ ์์์ '๋ ธ๋'๋ผ๊ณ ๋ถ๋ฆผ)์์ ์ฒ๋ฆฌํ ์ ์๋ ์ผ์ ๋ค ๊ฐ์ ธ์ ์ฒ๋ฆฌํ๋ค. Shuffle์ ์ฌ์ฉํ๊ณ ๋คํธ์ํฌ์ ์๋๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค. ์ด๋ฌํ Transformation๋ค์ ์ถํ์ ๋์คํฌ์ ๋ฐ๋ก ์ ์ฅํ๋ Checkpointing์ ํ ํ์๊ฐ ์๋ค๊ณ ํ๋ค.
7. Spark๊ฐ ๋์๊ฐ๋ ๊ณผ์
์ด์ RDD์ ๋ํด ์์๋ณด์์ผ๋ Spark๋ฅผ ์ข ์ ๋ฏ(?)ํ ๋๋์ด ๋๋ค. ์ด์ Spark๊ฐ ํด๋ฌ์คํฐ๋ผ๋ ๊ฒ์ ์์ฑํ๊ณ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง ๋์ํ, ์ค๋ช ์๋ฃ๋ฅผ ํตํด ์ดํด๋ณด์.
๊ทธ๋ฐ๋ฐ ์ด์จ๊ฑฐ๋ ์คํํฌ๊ฐ RAM์ ์ฌ์ฉํด์ ๋์๊ฐ๋ค๊ณ ํ๋ค. RAM๋ ๋ฉ๋ชจ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ด ๋ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น? ์คํํฌ๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ LRU(Least Recently Used) ์๊ณ ๋ฆฌ์ฆ, ์ฆ, ๊ฐ์ฅ ์ค๋ซ๋์ ์ฐธ์กฐ๋์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ํน์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ญ์ ํ๊ฒ ๋๋ค. ์ ๊น LRU์ ๊ดํด์ ๋์์ ๋ค๋ฅธ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ ๊น๋ง ์ค๋ช ํ๊ณ ๋์ด๊ฐ๊ฒ ๋ค. ์ด์ ๋ํด ์์๋ ๋ถ๋ค์ ๋ค์ ๋ด์ฉ์ผ๋ก ๋์ด๊ฐ๋ ์ข์ ๊ฒ ๊ฐ๋ค.
- FIFO(First-In-First-Out): ํ์ ๋์ผํ ์๋ฆฌ์ธ๋ฐ, ํ์ด์ง๊ฐ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ์ฌ๋ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ต์ฒด๋ ํ์ด์ง๋ฅผ ์ ์ ํ๋ค. ์ฆ, ๊ฐ์ฅ ์ค๋๋ ์๊ฐ์ธ ํ์ด์ง๊ฐ ๊ฐ์ฅ ์ฐ์ ์ ์ธ ์ญ์ ๋์์ด๋ค.
- ๋จ์ : ๊ฐ์ฅ ์ค๋๋ ํ์ด์ง๊ฐ ๊ณ์ ์ฌ์ฉ๋์ด์ผ ํ๋ค๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- LFU(Least Frequently Used): ๊ฐ์ฅ ์ ์ ํ์๋ฅผ ์ฐธ์กฐํ๋ ํ์ด์ง๋ฅผ ๊ต์ฒด
- ๋จ์ : ๋จ์ํ 'ํ์'์ ๊ธฐ๋ฐํ๋ฏ๋ก ์ต๊ทผ์ ์ฌ์ฉ๋ ํ์ด์ง๋ฅผ ๊ต์ฒด์ํฌ ๊ฐ๋ฅ์ฑ์ด ์๊ณ ํด๋น ํ์๋ฅผ ์ฆ๊ฐ์ํค๋ฉด์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
- LRU(Least Recently Used): ๊ฐ์ฅ ์ค๋ซ๋์ ์ฐธ์กฐ๋์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒด
- ๋จ์ : ํ๋ก์ธ์ค๊ฐ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ๊ทผํ ๋๋ง๋ค ์ฐธ์กฐ๋ ํ์ด์ง์ ๋ํ ์๊ฐ์ ๊ธฐ๋กํด ํฐ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
์คํํฌ์ ์ค์ํ ํน์ง์ผ๋ก ๊ณ ์ฅ์ ์ ๊ฒฌ๋๋ Fault-tolerant๋ผ๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ ๋ง Fault๊ฐ ๋ฐ์ํ์ ๋, Recovery๋ ์ด๋ป๊ฒ ํ ๊น? ์คํํฌ์์ ์ฌ์ฉ๋๋ Lineage๋ ์ฉ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ด๋ ์๊ณ ์ ๋ก๊น ์ด ๋๋ฉฐ ํน์ ํํฐ์ (๋ถํ ๋ ๋ฐ์ดํฐ)์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ๋ค๋ฅธ ๋ ธ๋(์๋ฒ)๋ฅผ ๊ฐ์ ธ์ ๋์ ์คํํ๊ฒ ๋๋ค.
8. Spark๋ฅผ ์ ๊ณตํ๋ ํ๋ซํผ
์คํํฌ๋ ์ง์ ๋ค๋ฃจ๊ธฐ๋ณด๋ค ์๋ฃจ์ ์ผ๋ก์ ํธํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ํ๋ซํผ์ด ์ญ์ ์กด์ฌํ๋ค. ์คํํฌ๋ฅผ ๋ง๋ ์ฌ๋๋ค์ด ์ฐฝ์ ํ DataBricks๊ฐ ์๋ค. ๋ณดํต DataBricks๋ ์์ ์ธ์คํด์ค์ผ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค. ๋ ๋ค๋ฅธ ํ๋ซํผ์ผ๋ก AWS EMR(Elastic MapReduce)์ด ์๋ค. ์ด๋ DataBricks์ ๋น์ทํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๋ณดํต ํฐ ์ธ์คํด์ค์ผ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
Python Libs
๋ค์์ Spark Platform ์ด์ธ์ ์ฌ๋ฌ๊ฐ์ง Python Library์ ๋ํด ์๊ฐํ๋ ค ํ๋ค.
1. Pandas
'ํ์ด์ฌ์ผ๋ก ๋ฐ์ดํฐ ๋ถ์?' ํ๋ฉด ๋น์ฐํ ๋๊ตฌ๋ ๋ค์ด๋ดค์ ๋ฒํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ์ฃผ๋ก 2์ฐจ์ Tabular data๋ก ๋์ด ์๋ ๋ฐ์ดํฐํ๋ ์์ ๋ค๋ฃฌ๋ค.
2. Boto
Python์ผ๋ก AWS์ ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ SDK(Software Developer Kit)์ด๋ค.
3.DASK
Python์ผ๋ก ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค. Pandas, Numpy, Scikit-learn API๋ฅผ ๋ชจ๋ ๋ณ๋ ฌ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ํด์ค๋ค. ์ฃผ๋ก ๋ฐฉ๋ํ ๋ฐ์ดํฐํ๋ ์์ ๋ถํ ํ๊ฑฐ๋ ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ฑ๊ณผ ๊ฐ์ด ๋น ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ฒ๋ฆฌํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ค. ํ๋จ์์ ์๊ฐํ Ray์๋ ๋ค๋ฅด๊ฒ Centralized ์ค์ผ์ฅด๋ง์ ์ฌ์ฉํ๋ค.
4.Ray
DASK์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ด์ฌ์ผ๋ก ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค. ์ฃผ๋ก ์ฌ๋ฌ๊ฐ์ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๋ถ์ฐ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋๋ค. DASK์๋ ๋ค๋ฅด๊ฒ Bottom-Up ์ค์ผ์ค๋ง์ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์ Bottom-Up ์ค์ผ์ค๋ง์ด๋, task๋ฅผ ๊ฐ ๋ก์ปฌ ์ค์ผ์ค๋ฌ์๊ฒ ์ ๋ฌํ๊ณ ๊ฐ๊ฐ์ ๋ก์ปฌ ์ค์ผ์ค๋ฌ๊ฐ ๊ฐ Worker๋ค์๊ฒ ๋ค์ task๋ฅผ assign, forward ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ทธ๋์ Centralized ์ค์ผ์ค๋ง์ ์ฌ์ฉํ๋ DASK์ ๋นํด ๋น ๋ฅด๊ณ task ์ง์ฐ(latency) ๋ฌธ์ ์ task throughput(task throughput์ด๋, ๋จ์ ์๊ฐ ๋น ์๋ฃ๋๋ task์ ์ซ์ ์ฆ, task ์๋ฃ์จ(rate)๋ฅผ ์๋ฏธํ๋ค)์ ๊ฐ์ ์ํค๋ ์ฅ์ ์ด ์๋ค.
Batch Query Engine
Apache Hive๋ Hadoop์์ ์ฌ๋ผ์ ์๋ HDFS(Hadoop File System)์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์์ง์ด๋ค. ๊ทธ๋ฌ๋ฉด Hive์ ์ฅ์ ์ ๋ฌด์์ผ๊น? ํ๋ก์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ฉด MapReduce(๋งต๋ฆฌ๋์ค) ์ก์ ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํ๋ค. ํ์ง๋ง Hive๋ฅผ ์ฌ์ฉํด์ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค๋ฉด ๋งต๋ฆฌ๋์ค ์ก์ผ๋ก ์๋์ผ๋ก ๋ณํํด์ฃผ๊ณ ์คํ๋๊ณ ์๋ ํ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ์ฒ๋ฆฌํด์ฃผ๋ ํธ์์ฑ์ ์ ๊ณตํ๋ค.
๊ทธ๋ฐ๋ฐ Spark Platform์ Spark SQL์ ์ฟผ๋ฆฌ ๊ธฐ๋ฅ์ด ์๋๋ฐ ๊ตณ์ด Hive๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ญ๊น? Hive์ Spark๋ ์๋ก ์ํธ๋ณด์ ์์ฉ์ ํ๋ค๊ณ ๋ณผ ์ ์๋ค. ์ฐ์ Hive๊ฐ Spark์๊ฒ ์ ๊ณตํ๋ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Hive โก๏ธ Spark : Hive ๋๋ถ์ ๋ค์ํ ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ๊ฐ๋ฅ
๋ฐ๋ฉด์, Spark๊ฐ Hive์๊ฒ ์ฃผ๋ ์ฅ์ ์ ๋ฌด์์ผ๊น? ์ฐ์ ํ๋จ์ ๊ทธ๋ฆผ์ ๋ณด์.
- Spark โก๏ธ Hive : Hive ์ฟผ๋ฆฌ๋ง์ ์ฌ์ฉํด Spark ์ฟผ๋ฆฌ์ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ค์ํผ Hive๋ ์ฌ๋ฌ๊ฐ์ง(Thrift, JDBC, ODBC) Driver, ์ฆ, ์ฌ๋ฌ๊ฐ์ง Application๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ค. ๋ฐ๋ผ์ ์ด ์ฌ๋ฌ๊ฐ์ง ์ดํ๋ฆฌ์ผ์ด์ ์ด ์๋ค๋ณด๋ ์ด ์ดํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ๋ DB๋ค์ด ์๋ค. ๋ง์ฝ Hive๊ฐ Spark์ ์ฐ๊ฒฐ๋๋ค๋ฉด Hive ์คํ ์์ง์ผ๋ก Spark๋ฅผ ์ฌ์ฉํ๊ฒ ๋๊ณ ๋จ์ํ Hive ์ฟผ๋ฆฌ๋ง์ ์ฌ์ฉํด Hive์ ์ฐ๊ฒฐ๋์ด ์๋ ์ดํ๋ฆฌ์ผ์ด์ ๋ค์ DB์ ๋ฐ์ดํฐ๋ค์ ์ฝ๊ฒ ์ฒ๋ฆฌํ๊ณ ๋น ๋ฅด๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๋ค.
'Apache Spark' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PySpark] Spark์ Dataframe API๋ฅผ ์์๋ณด์!(1) (4) | 2022.02.03 |
---|---|
[Infra] ๋ฐ์ดํฐ ์ธํ๋ผ - Ingestion&Transformation(Event Streaming) (0) | 2021.04.25 |
[Infra] ๋ฐ์ดํฐ ์ธํ๋ผ - Ingestion&Transformation (0) | 2021.04.23 |
[Infra] ๋ฐ์ดํฐ ์ธํ๋ผ ๊ตฌ์กฐ์ Sources (0) | 2021.04.23 |
[PySpark] ์ปจํ ์ธ ๊ธฐ๋ฐ ์ํ ์ถ์ฒ ์์คํ ๋ง๋ค์ด๋ณด๊ธฐ (18) | 2021.02.15 |