๋น ๋ฐ์ดํฐ์ Spark ์์๋ณด๊ธฐ - TIL230703
๐ KDT WEEK 14 DAY 1 TIL
- ๋น ๋ฐ์ดํฐ
- ํ๋ก(Hadoop)
- Spark
๐ฅ ๋น ๋ฐ์ดํฐ
- ์๋ฒ ํ๋๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ท๋ชจ์ ๋ฐ์ดํฐ
- ๊ธฐ์กด์ ์ํํธ์จ์ด๋ก๋ ์ฒ๋ฆฌํ ์ ์๋ ๊ท๋ชจ์ ๋ฐ์ดํฐ
๋น ๋ฐ์ดํฐ ์์) ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค ๋ฐ์ดํฐ(์์น์ ๋ณด ๋ฑ), ๊ฐ์ข IoT ์ผ์ ๋ฐ์ดํฐ, ๋คํธ์ํน ๋๋ฐ์ด์ค ๋ฑ
๐ฆ ๋น ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ํน์ง
- ๋น ๋ฐ์ดํฐ๋ฅผ ์์ค์์ด ๋ณด๊ดํ ๋ฐฉ๋ฒ : ์คํ ๋ฆฌ์ง
- ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํ ์ฒ๋ฆฌ ์๊ฐ ๋จ์ถ
- ๋น๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ( ex. ์น ๋ก๊ทธํ์ผ)๋ SQL๋ง์ผ๋ก๋ ์ฒ๋ฆฌ๊ฐ ์ด๋ ค์
โก๏ธ ๋ฐ๋ผ์ ๋์ฉ๋ ๋ถ์ฐ ์์คํ ์ด ํ์
- ๋ถ์ฐ ํ์ผ ์์คํ ๊ณผ ๋ถ์ฐ ์ปดํจํ ์์คํ
- Fault Tolerance : ์์์ ์๋ฒ๊ฐ ๊ณ ์ฅ๋๋ ๋์ํด์ผ ํจ
- Scale Out(์๋ฒ ์ถ๊ฐ) ํ์์ ํ์ฅ์ด ์ฉ์ด ํด์ผํจ
๐ฆ ํ๋ก(Hadoop)
๋ค์์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ ์์คํ ์ผ๋ก์จ, ๋ง์น ํ๋์ ๊ฑฐ๋ํ ์ปดํจํฐ์ฒ๋ผ ๋์ํ๋ค. (์ค์ ๋ ์ฌ๋ฌ ๊ฐ)
๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ก ๋ถ์ํ๊ณ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ํ๋ค.
ํ๋ก์ ํ๋ก 2.0๋ถํฐ YARN์ด๋ ๋ถ์ฐ์ฒ๋ฆฌ ์์คํ ์์์ ๋์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์๋ค.
์ด๋ฐ๊ฐ ์์๋ณผ Spark์ YARN์์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด๋ก ์คํ๋๋ค.
๐๏ธ HDFS - ๋ถ์ฐ ํ์ผ ์์คํ
- ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ก๋จ์๋ก ๋๋์ด ๋ค์์ ์๋ฒ์ ์ ์ฅํ๋ค.
- ๊ฐ ๋ธ๋ก์ 3๊ตฐ๋ฐ์ ์ค๋ณต ์ ์ฅํ์ฌ Fault tolerance ๋ณด์ฅ
- ํ๋ก 2.0์์๋ ๋ค์ ๋ ธ๋๋ฅผ ์ด์คํ(Active & Standby) ๊ตฌ์ฑ
๐๏ธ MapReduce : ๋ถ์ฐ ์ปดํจํ ์์คํ (ํ๋ก 1.0)
- ํ๋์ ์ก ํธ๋์ปค(Master)์ ๋ค์์ ํ์คํฌ ํธ๋์ปค(Slave)๋ก ์ด๋ฃจ์ด์ง
- ํ์คํฌ ํธ๋์ปค์์ ์ผ์ ๋ณ๋ ฌ์ฒ๋ฆฌ
- MarpReduce๋ง ์ง์ํ๋ฏ๋ก ์ ์ฐ์ฑ์ ๋จ์ด์ง
๋งต๋ฆฌ๋์ค ํ๋ก๊ทธ๋๋ฐ์ ํน์ง
- ๋ฐ์ดํฐ ์ ์ Key, Value์ ์งํฉ(๋ถ๋ณ)
- ๋ฐ์ดํฐ์ ์กฐ์์ map๊ณผ reduce ๋ ๊ฐ์ ์คํผ๋ ์ด์ ์ผ๋ก๋ง ๊ฐ๋ฅ > ์ตํต์ฑ ๋ถ์กฑ์ผ๋ก ์ธํ ๋ฎ์ ์์ฐ์ฑ
- ์ ํ๋ง : Map์ ๊ฒฐ๊ณผ๋ฅผ Reduce๋จ์ผ๋ก ๋ชจ์ผ๋ ๊ฒ > ์ด ๋ฐ์ดํฐ ์ด๋๋๋ฌธ์ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์์
- ๋ฐฐ์น ์์ ์ค์ฌ
Map๊ณผ Reduce
- Map (k,v) -> [(k', v')*]
- ํ๋์ Key Value ํ์ด๊ฐ ๋ค์ด์ค๋ฉด ์๋ก์ด Key Value ํ์ด๋ก ๋ง๋ค์ด์ค(transformation)
- ์ ๋ ฅ : ์์คํ ์ ์ํด ์ฃผ์ด์ง๋ฉฐ HDFS ํ์ผ์์ ์๋์ผ๋ก ๋์ด์ด
- ์ถ๋ ฅ : ์ ๋ ฅ Key Value ํ์ด๋ฅผ ๊ทธ๋๋ก ์ถ๋ ฅํด๋ ๋๊ณ , ์์ด๋ ๋๋ค.
- Reduce (k' , [v1', v2', v3', v4', ...]) -> (k'', v'')
- ์ ๋ ฅ : ๋งต์ ์ถ๋ ฅ ์ค ๊ฐ์ Key๋ฅผ ๊ฐ๋ Value ๋ค์ ์์คํ ์ด ๋ฌถ์ด์ ๋ฃ์ด ๋์ด์ด
- ์ถ๋ ฅ : Key์ Value ๋ฆฌ์คํธ๋ฅผ ์๋ก์ด Key Value ํ์ด๋ก ๋ณํ๋์ด HDFS ํ์ผ์ ์ ์ฅ๋๋ค.
๐ฅ๏ธ YARN : ๋ถ์ฐ ์ปดํจํ ์์คํ (ํ๋ก 2.0)
- ์ธ๋ถ ๋ฆฌ์์ค ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋ฒ์ฉ ์ปดํจํ ํ๋ ์์(๋ฒ์ฉ์ )
- ํ๋์ ๋ฆฌ์์ค ๋งค๋์ (Master)์ ๋ค์์ ๋ ธ๋ ๋งค๋์ (Slave)๋ก ์ด๋ฃจ์ด์ง
- Slave๋ ๊ทธ ์๋ฒ์ ํด๋นํ๋ ๋ฆฌ์์ค(์ปจํ ์ด๋๋ค)๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ
YARN์ ๋์
- ํด๋ผ์ด์ธํธ๊ฐ ์คํ ์ฝ๋(๋ฐ ํ๊ฒฝ์ ๋ณด)๋ฅผ RM(Resource Manager)์๊ฒ ๋ณด๋
- RM์ด NM(Node Manager)๋ฅผ ํตํด AM(Application Master)๋ฅผ ์คํํ๋ค.
- YARN Application๋ง๋ค ํ๋์ AM์ด ์์ฑ๋๋ค.
- AM์ด RM์ผ๋ก ์ฝ๋ ์คํ์ ํ์ํ ๋ฆฌ์์ค(์ปจํ ์ด๋)๋ฅผ ๋ฐ์์จ๋ค.
- AM์ NM์ ํตํด ์ปจํ ์ด๋๋ค์ ๋ฐ์ ์ฝ๋๋ฅผ ์คํํ๋ค.(ํ์คํฌ)
- ํ์คํฌ๋ค์ ์์ ์ ์ํฉ์ ์ฃผ๊ธฐ์ ์ผ๋ก AM์๊ฒ ์
๋ฐ์ดํธํ๋ค.(heartbeat)
- ํ์คํฌ๊ฐ ์คํจํ๊ฑฐ๋ ๋ณด๊ณ ๊ฐ ์ค๋ ์๊ฐ ์์ผ๋ฉด ๋ค๋ฅธ ์ปจํ ์ด๋๋ก ์ฌ์คํ
3๏ธโฃ ํ๋ก 3.0
- YARN 2.0์ ์ฌ์ฉ
- YARN ํ๋ก๊ทธ๋จ๋ค์ ๋ ผ๋ฆฌ์ ์ธ ๊ทธ๋ฃน(ํ๋ก์ฐ)๋ก ๋๋์ด์ ํจ์จ์ ์ธ ์์ ๊ด๋ฆฌ ๊ธฐ๋ฅ ์ ๊ณต
- ํ์๋ผ์ธ ์๋ฒ์์ HBase๋ฅผ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉ
- ๋ค์์ ์คํ ๋ฐ์ด ๋ค์๋๋ฅด๋ฅผ ์ง์
- HDFS, S3, Azure Storage ์ด์ธ์๋ Azure Data Lake Storage ๋ฑ์ ์ง์
Data Skew
๊ฐ ํ์คํฌ๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ ํฌ๊ธฐ์ ๋ถ๊ท ํ์ด ์กด์ฌํ๋ ๊ฒ
Mapper์์ Reducer๋ก ์ค๋ ๊ณผ์ ์์ ํน์ ํค์ ๊ฐ์ด ํนํ๋ ๋ง๋ค๋ฉด ๋ฐ์
๋น ๋ฐ์ดํฐ ์์คํ ์๋ ์ด ๋ฌธ์ ๊ฐ ๋ชจ๋ ์กด์ฌํ๋ฉฐ, ๋ฐ์ดํฐ ์์ง๋์ด๊ฐ ๊ณ ์ํ๋ ์ด์ ์ค ํ๋์ด๋ค.
์ด ๋ฌธ์ ๋ ๋งต๋ฆฌ๋์ค๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์์คํ ์๋ ๋ชจ๋ ์กด์ฌํ๋ค.
MapReduce ๋์
๋ ๋ฒ์ฉ์ ์ธ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ ์์๋ค์ ๋ฑ์ฅ > YARN, Spark
Hive, Presto
๐ฉ Spark
ํ๋ก์ ๋ค๋ฅผ ์๋ 2์ธ๋ ๋น ๋ฐ์ดํฐ ๊ธฐ์
๋ถ์ฐ ํ๊ฒฝ ์์์ ๋์๊ฐ๋ ๋ถ์ฐ ์ปดํจํ ์์คํ ์ผ๋ก์จ, ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Spark ๋ฐ์ดํฐ ์์คํ ์ฌ์ฉ ์)
- 1) ๋์ฉ๋ ๋น๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ (ETL or ELT)
- 2) ML ๋ชจ๋ธ์ ์ฌ์ฉ๋๋ ๋์ฉ๋ ํผ์ณ ์ฒ๋ฆฌ (๋ฐฐ์น or ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ)
๐ Spark vs MapReduce
- Spark์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ(๋ถ์กฑํ๋ฉด ๋์คํฌ ์ฌ์ฉ), MapReduce์ ๋์คํฌ ๊ธฐ๋ฐ
- MapReduce๋ ํ๋ก(YARN)์์์๋ง ๋์ํ์ง๋ง, Spark์ ๋ค๋ฅธ ๋ถ์ฐ ์ปดํจํ ํ๊ฒฝ ์ง์(K8s, Mesos ๋ฑ)
- MapReduce๋ Key Value ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ง ์ง์ํ์ง๋ง, Spark์ ํ๋ค์ค ๋ฐ์ดํฐํ๋ ์๊ณผ ๋น์ทํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ง์
- Spark์ ๋ํ ๋ฐฐ์น ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์คํธ๋ฆผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, SQL, ๋จธ์ ๋ฌ๋, ๊ทธ๋ํ ๋ถ์ ๋ฑ์ ๋ค์ํ ๊ธฐ๋ฅ ์ง์
๐ฒ Spark ํ๋ก๊ทธ๋๋ฐ API
- RDD (Resilient Distributed Dataset) : ๋ก์ฐ๋ ๋ฒจ API, ์ฝ๋ฉ ๋ณต์ก๋ ์ฆ๊ฐ
- DataFrame & Dataset(ํ๋ค์ค์ ํก์ฌ) : ํ์ด๋ ๋ฒจ API๋ก, ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ + ML์ ์ ๋ฆฌ
- Spark SQL : ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ์กฐ์์ ์ ๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ ํ๋ ์์ ํ ์ด๋ธ์ฒ๋ผ SQL ์ฒ๋ฆฌ ๊ฐ๋ฅ
Spark ML
- ๋จธ์ ๋ฌ๋ ๊ด๋ จ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ, ์ ํธ๋ฆฌํฐ๋ก ๊ตฌ์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ฐ์ดํฐํ๋ ์๊ณผ SparkSQL๋ฑ์ ์ด์ฉํด ์ ์ฒ๋ฆฌํ๋ฉฐ, ๋์ฉ๋ ๋ฐ์ดํฐ๋ ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค.
- ML Pipeline์ ํตํด ๋ชจ๋ธ ๋น๋ฉ ์๋ํํ๊ณ , MLflow๋ก ๋ชจ๋ธ ๊ด๋ฆฌ ๋ฐ ์๋น๋ ๊ฐ๋ฅ
* spark.mlib๋ RDD ๊ธฐ๋ฐ์ด๊ณ spark.ml์ ๋ฐ์ดํฐํ๋ ์ ๊ธฐ๋ฐ์ด์ง๋ง, RDD์ ๋์ด์ ์ ๋ฐ์ดํธ๊ฐ ์์ผ๋ฏ๋ก spark.ml ์ฌ์ฉ
๐๏ธ Spark ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ(YARN ๊ธฐ์ค)
Spark Cluster : ํ๋์ Driver์ ์ํด ์ฌ๋ฌ ๊ฐ์ Executor๊ฐ ์ ์ด๋๋ ํํ
Driver (YARN์ Appllication Master)
- ์คํ๋๋ ์ฝ๋์ ๋ง์คํฐ ์ญํ ์ํ
- ์ฌ์ฉ์ ์ฝ๋๋ฅผ ์ค์ Spark ํ์คํฌ๋ก ๋ณํํ์ฌ Spark Cluster์์ ์คํ
- client ๋ชจ๋ : ๊ฐ๋ฐorํ์ตorํ
์คํธ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ๋
- Drvier๊ฐ Spark Cluster ๋ฐ์์ Executor๋ฅผ ์ ์ดํ๋ฉฐ, ๋ ธํธ๋ถ์ด๋ Spark Shell ๋ฑ ์ฌ์ฉ
- cluster ๋ชจ๋ : ๊ฐ๋ฐ์ด ๋๋ ์ฝ๋๋ฅผ ์ค์ ํ๋ก๋์
์ด์์ ์ฌ์ฉํ ๋
- Driver๊ฐ Spark Cluster ์์์ Executor๋ฅผ ์ ์ดํ๋ฉฐ, spark-submit์ ์ฌ์ฉ
- client ๋ชจ๋ : ๊ฐ๋ฐorํ์ตorํ
์คํธ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ๋
Executor(YARN์ ์ปจํ ์ด๋) : ์ค์ ํ์คํฌ๋ฅผ ์คํํด์ฃผ๋ ์ญํ ์ํ
local[n] : YARN์ด ์๋ ๋ก์ปฌ์ ๊ฒฝ์ฐ
- ๊ฐ๋ฐ/ํ ์คํธ์ฉ์ผ๋ก์จ Spark Shell, IDE, ๋ ธํธ๋ถ ๋ฑ์ ์ด์ฉํจ
- Local JVM์์ ํ๋์ Driver๊ฐ ์ฌ๋ฌ ๊ฐ์ Executor์ ์ ์ดํ๋ ํํ
- n์ ํ๋์ JVM ์์ n๊ฐ์ Executor์ ์๊ฐ ๋๋ค. (n๊ฐ์ ์ฐ๋ ๋) (*์ด๋ฉด ์ปดํจํฐ์ ๋ชจ๋ ์ฝ์ด์ฌ์ฉ)