์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ ์ฒ๋ฆฌ๋ฅผ ์ํ Spark API
Kafka, Kinesis, Flume, TCP ์์ผ ๋ฑ์ ๋ค์ํ ์์ค์์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์์๋ค.
Join, Map, Reduce, Window์ ๊ฐ์ ๊ณ ๊ธ ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ

Spark Streaming์ ์ค์๊ฐ ์ ๋ ฅ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ Batch๋ก ๋๋ ๋ค์ Spark Engine์์ ์ฒ๋ฆฌํ์ฌ ์ต์ข ๊ฒจ๊ณผ ์คํธ๋ฆผ์ ์ผ๊ด์ ์ผ๋ก ์์ฑํ๋ค.
DStream๊ณผ Structured Streaming ๋ ์ข ๋ฅ๊ฐ ์กด์ฌํ๋ค.

| Dstream | Structured Streaming |
|---|---|
| RDD ๊ธฐ๋ฐ ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ | DataFrame ๊ธฐ๋ฐ ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ |
| Spark SQL ์์ง์ ์ต์ ํ ๊ธฐ๋ฅ ์ฌ์ฉ๋ถ๊ฐ๋ฅ | Catalyst ๊ธฐ๋ฐ ์ต์ ํ ํํ์ ๊ฐ์ ธ๊ฐ๋ค. |
| ์ด๋ฒคํธ ๋ฐ์ ์๊ฐ ๊ธฐ๋ฐ ์ฒ๋ฆฌ ๋ถ๊ฐ๋ฅ | ์ด๋ฒคํธ ๋ฐ์ ์๊ฐ ๊ธฐ๋ฐ์ ์ฒ๋ฆฌ ๊ฐ๋ฅใ ๋ค. |
| ๊ฐ๋ฐ์ด ์ค๋จ๋ ์ํ(RDD ๊ธฐ๋ฐ ๋ชจ๋์ ํด๋น) | ๊ณ์ํด์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ณ ์๋ค. |
lines_df = spark.readStream \
.format("socket") \
.option("host", "localhost") \
.option("port", "9999") \
.load()
Spark Structured Streaming์์ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ ์์คํ ์ด๋ ์คํ ๋ฆฌ์ง๋ก ์ถ๋ ฅ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
๋ณํ๋๊ฑฐ๋ ์ง๊ณ๋ ๋ฐ์ดํฑ ์ด๋ป๊ฒ ์ฐ์ด๊ฑฐ๋ ์๋น๋๋์ง๋ฅผ ์ ์ํ๋ค.
OutputMode : ํ์ฌ Micro Batch์ ๊ฒฐ๊ณผ๊ฐ Sink์ ์ด๋ป๊ฒ ์ฐ์ผ์ง ๊ฒฐ์
word_count_query = counts_df.writeStream \
.format("console") \
.outputMode("complete") \
.option("checkpointLocation", "chk-point-dir") \
.start()
Unspecified : default ๋ชจ๋, ํ์ฌ Micro Batch๊ฐ ๋๋๋ฉด ๋ค์ Batch๊ฐ ๋ฐ๋ก ์์ํ๋ค.
Time Interval : ๊ณ ์ ๋ ์๊ฐ๋ง๋ค Micro Batch๋ฅผ ์์ํ๋ค. ํ์ฌ Batch๊ฐ ์ง์ ๋ ์๊ฐ์ ๋์ด์ ๋๋๋ฉด ๋๋์๋ง์ ๋ค์ Batch๊ฐ ์์๋๋ค. ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์์๋์ง ์๋๋ค.
One Time -> Available-Now : ์ง๊ธ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ๊ณ ์ค๋จ
Continuous : ์๋ก์ด ์ ์ง์ฐ ์ฐ์ ์ฒ๋ฆฌ ๋ชจ๋์์ ์คํ
Spark Cluster Manager๋ก local[n] ์ง์
์ฃผ๋ก ๊ฐ๋ฐ์ด๋ ๊ฐ๋จํ ํ ์คํธ ์ฉ๋์ด๋ค.
ํ๋์ JVM์์ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค.
Executor์์ ์์ฑ๋๋ Thread ์

Mac์ด๋ผ๋ฉด Mac Catalina ํน์ ์ดํ ๋ฒ์ ๊ธฐ์ค
Java
Spark ๋ค์ด๋ก๋