Spark Architecture
[์ฐธ์กฐ ๋ฌธํ]

๐ก๋ชฉ์ฐจ
1. ๋น ๋ฐ์ดํฐ์ Hadoop์ ๋ฑ์ฅ
2. Hadoop ๊ตฌ์กฐ์ ๊ฐ์
3. MapReduce ๋ฐฉ์ ๋ฐ ํ๊ณ
4. Apache Spark์ ๋ฑ์ฅ
5. Apache Spark์ ์ปดํฌ๋ํธ
6. Apache Spark์ ๊ตฌ์กฐ
7. Hadoop vs. Spark
8. PySpark API ๊ฐ์
๐ก๊ฐ์
๋น ๋ฐ์ดํฐ์ ๊ณผ์ ๋ ๋ ๊ฐ์ง๋ก ์์ฝํ ์ ์๋ค.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ด๋ฆฌ
- ๋ฐ์ดํฐ์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ, ์ ์ turnaround time(์์ ์๊ฐ)์ผ๋ก ๋น์ฆ๋์ค ์ธ์ฌ์ดํธ ๋์ถ
์ด๋ฌํ ๊ณผ์ ๋ค์ด Hadoop์ ๋ฑ์ฅ์ผ๋ก ์ด์ด์ก๋ค.
๐กํ๋ก ํ๋ ์์ํฌ
์ด ์ ์์๋ ํ๋ก์ ์ปดํฌ๋ํธ๋ค์ด ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ธ์ฌ์ดํธ๋ฅผ ๋์ถํ๋ ๊ณผ์ ์ ์ค๋ช ํ๋ค. ํ๋ก์ ํ์ค ์์ฝํ ์ ์๋ค.
๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ์ปดํจํฐ๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ๋ค๋ก ๋ถ์ฐ ์ฒ๋ฆฌํ๋ ํ๋ ์์ํฌ
๋จ์ผ ์๋ฒ์์ ์์ฒ ๋ ๊ท๋ชจ๊น์ง ํ์ฅํ์ฌ ๊ท๋ชจ์ ๋ง๋ ์ฒ๋ฆฌ๋๊ณผ ๋ณด๊ด๋์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์๋ค. HW์ ์์กดํ๊ธฐ ๋ณด๋จ ์ ํ๋ฆฌ์ผ์ด์ ๋จ์์ ์๋ฒ ๊ณ ์ฅ์ ๊ฐ์งํ๊ณ ์ฒ๋ฆฌํ์ฌ ๋ด๊ณ ์ฅ์ฑ๊น์ง ๋ณด์ฅํ๋ค.
ํ๋ก์ 3 ๊ฐ์ ํต์ฌ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋๋ค.
- Hadoop Distributed File System (HDFS) - ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ์ ๋น ๋ฅธ ์ ๊ทผ์ ์ ๊ณตํ๋ ๋ถ์ฐ ์ ์ฅ ํ์ผ ์์คํ
- Yet Another Resource Negotiator (YARN) - ์ก ์ค์ผ์ค๋ง๊ณผ ํด๋ฌ์คํฐ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ ํ๋ ์์ํฌ
- MapReduce - ๋๊ท๋ชจ ๋ฐ์ดํฐ ์งํฉ์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๋ ์์คํ
ํ๋ก ๊ตฌ์กฐ
ํ๋ก์ ์คํ ๋ฆฌ์ง ๋ฐ ๋ถ์ฐ ์ฒ๋ฆฌ์ master/slave(=worker)์ ๊ฐ๋ ์ ๋์ ํ๋ค.

์ ๊ตฌ์กฐ์์, ํ๋์ master node(๋ง์คํฐ)์ ๋ค์์ worker node(์ฌ๋ ์ด๋ธ/์์ปค)๊ฐ ์๋ค. ๋ง์คํฐ ๋ ธ๋์ ์ญํ ์ ์ฌ๋ฌ ํจ์๋ค์ ์ฌ๋ ์ด๋ธ ๋ ธ๋๋ค์ ๋ฐฐ์ ํ๊ณ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ค. ์ฌ๋ ์ด๋ธ ๋ ธ๋๋ค์ด ์ค์ง์ ์ธ ์ฒ๋ฆฌ์ ๋ฐ์ดํฐ ์ ์ฅ์ ๋งก๋ ๋ฐ๋ฉด, ๋ง์คํฐ๋ ์ด์ ๋ํ metadata๋ฅผ ๋ณด๊ดํ๋ค. ์ฆ, ํ์ผ ๊ตฌ์กฐ, ๊ถํ, ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๋ ธ๋์ ์๋์ง ๋ฑ์ ์๊ณ ์๋ค.
๋ง์คํฐ์ Resource manager์ ์ฌ๋ ์ด๋ธ์ Node manager(s)๋ YARN ํ๋ ์์ํฌ์ ์ผ๋ถ์ด๋ค. ๋ ธ๋ ๋งค๋์ ๊ฐ ๋ฆฌ์์ค ๋งค๋์ ์๊ฒ ๋ฆฌ์์ค ์ํ๋ฅผ ์ ๋ฌํ๊ณ , ๋ฆฌ์์ค ๋งค๋์ ๋ ์ด๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ์ญํ ์ด๋ค.
๊ฐ๋จํ๊ฒ ํ๋ก์ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ์๊ณ , ์ด์ ๋ถํฐ ํ๋ก์ ์ฒ๋ฆฌ ๋ถ๋ถ - ๋งต๋ฆฌ๋์ค์ ๊ดํด ์ค๋ช ํ๊ฒ ๋ค.
๐กMapReduce
๋งต๋ฆฌ๋์ค(MR)๋ SW ํ๋ ์์ํฌ๋ก ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ํด๋ฌ์คํฐ ์์์ ๊ณ ์ฅ์์ด ๋ณ๋ ฌ ์ฒ๋ฆฌํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํํ๋ค.
MR ๋ด Job์ ๋ณดํต input ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ด๋ฆฌ๋ค๋ก ์ชผ๊ฐ์ด, map task๋ค๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌํ๋ค. Map phase์ ์ถ๋ ฅ์ Reduce phase์ ์ ๋ ฅ์ผ๋ก aggregate, summary, transform ๋ฑ์ ๊ฑฐ์ณ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ ๋ค. YARN์ ์ด๋ค์ ์ค์ผ์ค๋งํ๊ณ , ๋ชจ๋ํฐ๋งํ๋ฉฐ ์คํจ ์ ์ฌ์คํํ๋ค.

์ฌ์ฉ์๋ค์ MR์ ๊ณ ์์ค ์ฐ์ฐ๋ค๋ก ๋ถ๋ฐฐ๋ ๊ณ ์ฅ์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ๋ณ๋ ฌ ์ฒ๋ฆฌ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๊ฒ ๋๋ค.
MapReduce์ ํ๊ณ
Data Input/Output
- MR์ ์ฐ์ฐ๋ง๋ค, ๋ฐ์ดํฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์ ์ฅ ์ฅ์น์ ๊ธฐ๋กํด์ผ ํ๋ค. ์ด๋ ๋ฌผ๋ฆฌ์ ์ ์ฅ ์ฅ์น๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํ์คํฌ๋ฅผ ์ํํ ๋ค, ๋ค์ ๊ธฐ๋กํด์ผ ํจ์ ๋ปํ๋ค.
- ์ด๋ฌํ I/O ์ฐ์ฐ๋ค์ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฑธ๋ฆผ๋์ด๋ค.
์ค์๊ฐ ์ฒ๋ฆฌ ๋ถ๊ฐ๋ฅ
- MR๋ ๋ณธ๋ Batch ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ์ค๊ณ๋๋ค. ํ๋ฒ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ, ์ฒ๋ฆฌ, ๊ธฐ๋กํ๋ ๊ตฌ์กฐ์ด๋ค.
- Stream Processing์ฒ๋ผ ์ค์๊ฐ ๋๋ ์ค์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.

๐กApache Spark
๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ํตํฉ ๋ถ์ ์์ง์ผ๋ก ์คํธ๋ฆฌ๋ฐ, SQL, ๋จธ์ ๋ฌ๋๊ณผ ๊ทธ๋ํ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Spark๋ MapReduce์ ์์ ํธํ์ผ๋ก ๋ณผ ์ ์๋ค. Spark๋ ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ ๋์ RAM์ ๊ธฐ๋กํ๋ค. ๋ชจ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ฃจ์ด์ง๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ํจ์ฌ ๋นจ๋ฆฌ ์ฒ๋ฆฌํ๋ค.
Spark์ ํน์ง
๋น ๋ฅธ ์ฒ๋ฆฌ
- ์คํํฌ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ถฉ๋ถํ๋ฉด ํ๋ก๋ณด๋ค 100๋ฐฐ ๋น ๋ฅด๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ผ๋ก ๋์คํฌ๋ฅผ ์จ์ผ ํ๋ ์ํฉ์์๋ 10๋ฐฐ ๋น ๋ฅด๋ค.
- ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ณด๊ดํ๋ค. ๋คํธ์ํฌ ๋ฆฌ์์ค, ๋ฌผ๋ฆฌ์ ์ฅ์น I/O ๋์ RAM์ ๋ง์ด ํ์ฉํ์ฌ ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.

ํธ๋ฆฌ์ฑ
- Scala๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, Scala, Java, Python, R๊ณผ SQL์ ์ํ API๋ฅผ ์ ๊ณตํ๋ ์ ์ฐ์ฑ์ ๊ฐ์ง๋ค.
๋ฐ์ด๋ ๋ถ์
- ๋งต๋ฆฌ๋์ค ๋ง๊ณ ๋ SQL ์ฟผ๋ฆฌ, ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ, ๋จธ์ ๋ฌ๋, ๊ทธ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค.
๋ค์ํ ๋ฐ์ดํฐ ์์ค
- ํ๋ก ํ๋ ์์ํฌ๋ฅผ ์ง์ํ๋ ์ด๋ค ์คํ ๋ฆฌ์ง ํฌ๋งท์ผ๋ก๋ ์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ค. HDFS, S3, HBase, Cassandra, Avro ๋ฑ
- ์คํ ํ๊ฒฝ์ผ๋ก ๋จ์ผ ํด๋ฌ์คํฐ, EC2, Hadoop YARN, Mesos, Kubernetes, Apache Hive ๋ฑ์ ๋ฐ์ดํฐ ์์ค ์์์ ๋์๊ฐ ์ ์๋ค.
Spark ์ปดํฌ๋ํธ

- SparkCore API - Spark Core๋ Spark์ ํต์ฌ ์คํ ์์ง์ผ๋ก, ๋ชจ๋ ๊ธฐ๋ฅ๋ค์ ๊ธฐ๋ฐ์ด๋ค. ๋ถ์ฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ, ์ธ-๋ฉ๋ชจ๋ฆฌ ์ฐ์ฐ, ๋ด๊ณ ์ฅ์ฑ, ๋ฆฌ์์ค ๊ด๋ฆฌ, ์ธ๋ถ ๋ฐ์ดํฐ ์์ค ์ฐ๋ ๋ฑ์ ์ ๊ณตํ๋ค.
- Spark SQL - ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ฐ์ธ๋ค. Spark ํ๋ก๊ทธ๋จ ๋ด ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ๊ฑฐ๋, Hive, Avro, Parquet, JSON, JDBC์ ์ฐ๋์ํฌ ์๋ ์๋ค. HiveQL๋ ์ง์ํด์ Hive ์จ์ดํ์ฐ์ค์ ์ ๊ทผํ ์ ์๋ค.

- Spark Streaming - Spark Core API์ ๊ธฐ๋ฐํ์ฌ ๋ด๊ณ ์ฅ์ฑ ์ค์๊ฐ ๋ํํ ๋ฐ์ดํฐ ๋ถ์์ ์ ๊ณตํ๋ค. HDFS, Flume, Kafka, Twitter ๋ฑ์ ๋ฐ์ดํฐ ์์ค์ ์ฐ๋ ๊ฐ๋ฅํ๋ค.
- Spark MLib - Spark Core API์ ๊ธฐ๋ฐํ์ฌ ํ์ฅ ๊ฐ๋ฅํ ML ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค. MLib๋ ์ด๋ค ํ๋ก ๋ฐ์ดํฐ(HDFS, HBase, ๋ก์ปฌ ์คํ ๋ฆฌ์ง)์๋ ์ฌ์ฉํ ์ ์์ด ํ๋ก ์ํฌํ๋ก์ฐ์ ๋์ ํ๊ธฐ ํธ๋ฆฌํ๋ค.
- GraphX - Spark API๋ก Graph ๊ตฌ์ถ ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋๊ท๋ชจ Graph ๋ฐ์ดํฐ๋ฅผ ๋ํํ์ผ๋ก build, transform ํ ์ ์๋ค.
๐กSpark Architecture
Spark๋ ํ๋ก์ฒ๋ผ master/slave ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ฉฐ, master๊ฐ driver ์ญํ , slave๊ฐ worker ์ญํ ์ ํ๋ค. ํด๋ฌ์คํฐ๋ ๋ง์คํฐ์ ์ฌ๋ฌ ๋์ ์ฌ๋ ์ด๋ธ๋ก ๊ตฌ์ฑ๋๋ค.
๋ง์คํฐ์๋ driver program์ด ์์ด์ Job ์คํ์ ์ค์ผ์ค๋ง์ ํ๊ณ , cluster manager๋ก ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ค. Spark ํน์ spark-submit์ ์คํํ๋ฉด, driver program์ด SparkContext๋ฅผ ๋ง์คํฐ์ ์์ฑํ๋ค. SparkContext๋ Spark ๊ธฐ๋ฅ์ ์ง์ ์ ์ด๋ค.

- Driver ํ๋ก๊ทธ๋จ์ ๋๊ท๋ชจ input ๋ฐ์ดํฐ๋ฅผ ํํฐ์ ์ผ๋ก ์ชผ๊ฐ๊ณ (๋ํดํธ 128MB) ์ฌ๋ ์ด๋ธ ๋ ธ๋๋ค์ด ์ฒ๋ฆฌํ๋๋ก ๋ถ๋ฐฐํ๋ค.
- SparkContext๋ ํ๋์ job์ ์ฌ๋ฌ ๊ฐ์ task๋ก ์ชผ๊ฐ์ด ์ฌ๋ ์ด๋ธ ๋ ธ๋๋ค์ ๋ถ๋ฐฐํ๋ค. ์ดํ task๋ค์ด ์ฒ๋ฆฌ๋๊ณ , driver์ SparkContext์ ์ํด ์ ์ด๋๋ค.
- ์ฌ๋ ์ด๋ธ ๋ ธ๋๋ค์ ์ญํ ์ task๋ฅผ ์ํํ๋ฉฐ ๊ทธ ์ํ๋ฅผ driver๋ก ๋ณด๊ณ ํ๋ ์ผ์ด๋ค. Task ์๋ partition ์์ ๋์ผํ๋ค.
- SparkContext๋ cluster manager์ ์ฌ๋ฌ job์ ๊ด๋ฆฌํ๋ค. Cluster manager๋ ์ฌ๋ ์ด๋ธ ๋ ธ๋๋ค์ CPU, ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ฆฌ์์ค๋ค์ ํ ๋นํ๋ค. Cluster manager๋ Standalone, Mesos, YARN์ด๋ Kubernetes๋ฅผ ์ธ ์ ์๋ค.
Spark Internal Work-flow
1. Application ์ฝ๋๊ฐ submit๋๋ฉด, driver program์ SparkContext๋ฅผ ์ด๊ธฐํ ํ๊ณ ๋ด๋ถ์ ์ผ๋ก ์ฝ๋ ์์ transformation ๋ฐ action๋ค์ DAG๋ก ๋ณํํ๋ค. DAG๋, ๋ฐ์ดํฐ์ ๋ํ ์์ฐจ์ ์ธ ์ฐ์ฐ๋ค์ ๊ทธ๋ํ ํํ๋ก ํํํ ๊ฒ์ด๋ค.
2. Driver program์ ์ฐ์ฐ์ ์ต์ ํํ ๋ค, DAG๋ฅผ ๋ค์ task๋ก ๊ตฌ์ฑ๋ ๋ฌผ๋ฆฌ์ ์คํ ๊ณํ์ผ๋ก ๋ค์ ๋ณํํ๋ค. ์ฆ, Driver program์ด ์ด๋ค task๋ฅผ ์ํํ ์ง์ ์ด๋ป๊ฒ ์ค์ผ์ค๋ง(์์ ๋ฐฐ๋ถ)ํ ์ง ๊ฒฐ์ ํ๋ค.
3. Driver program์ด ์์ ์ ๋ถ๋ฐฐํ๊ณ ๋๋ฉด, cluster manager์ ํต์ ํ์ฌ ์ฌ๋ ์ด๋ธ ๋ ธ๋๋ค์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๋ค. ์ดํ, cluster manager๊ฐ driver ๋์ ์ฌ๋ ์ด๋ธ ๋ ธ๋๋ค์ executor๋ค์ ์คํํ๋ค.
4. Executor๋ค์ ์คํ ์ , ์์ ์ driver program์ ๋ฑ๋กํ์ฌ ์ ์ฒด์ ์ธ executor๋ค์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ ์ ์๊ฒ ํ๋ค. Executor๋ค์ task ์ํ ์ํ๋ฅผ driver๋ก ๋ณด๊ณ ํ๋ค.
Spark vs. Hadoop?
- ์คํํฌ๋ ํ๋ก์ด ์๋๋ผ ๋งต๋ฆฌ๋์ค์ ๋น๊ตํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค.
- ์คํํฌ๋ ์์ฒด์ ์ธ ๋ถ์ฐ ํ์ผ ์์คํ ์ด ์์ง๋ง, HDFS๋ฅผ ์ธ ์ ์๋ค.
- ์คํํฌ๋ ํ๋ก ์์์ ์คํ๋์ด, ํ๋ก์ cluster manager(YARN)๊ณผ ๋ด๋ถ ์คํ ๋ฆฌ์ง(HDFS, HBase ๋ฑ)์ ์ด์ ์ ํ์ฉํ ์ ์๋ค.
๋ฐ๋ผ์ Spark๋ฅผ Hadoop์ ๋์ฒด์ฌ๊ฐ ์๋ MapReduce์ ์์ ํธํ์ผ๋ก ๋ณด๋ ๊ฒ์ด ๋ ์ณ๋ค.
๐กPySpark API
PySpark๋ ์คํํฌ๋ฅผ ์ง์ํ๊ธฐ ์ํ Python API์ด๋ค.

ํ์ด์ฌ์ ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค์ ํนํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ๋ง์ ์ด๋ค์ด ์ด๋ฏธ Python์ Pandas data transformation๊ณผ ๋ฐ์ดํฐ ์ธ์ฌ์ดํธ ๋์ถ ํ๋ก๊ทธ๋๋ฐ์ ์ต์ํ๋ค. PySpark๋ Py4j ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ฐ๋ฐ๋์๋ค.
์ฅ์ :
- ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ณ ๊ณ ์์ค์ API๋ฅผ ์ ๊ณตํ๋ค.
- ๋ถ์ฐ ํ๊ฒฝ ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ์ ์๋ ๋ํํ API๋ฅผ ์ ๊ณตํ๋ค.
- ์ฝ๋ ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์, ๋ณดํธ์ฑ ๋ฑ์ ์ด์ ์ด ์๋ค.
- Java๋ Scala๋ก๋ ์ด๋ ค์ด ๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ์ํ ๊ธฐ๋ฅ์ด ๋ง๋ค.