Spark

Spark Architecture

appendonly 2024. 2. 27. 09:43

 

[์ฐธ์กฐ ๋ฌธํ—Œ]

https://medium.datadriveninvestor.com/introduction-to-spark-with-python-spark-architecture-and-components-explained-in-detail-54e2ba09d6fe

๐Ÿ’ก๋ชฉ์ฐจ

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๋กœ๋Š” ์–ด๋ ค์šด ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด ๋งŽ๋‹ค.