Spark streaming 01 - asloud/dev_note01 GitHub Wiki
Spark streaming ๊ฐ๋
, ๊ธฐ๋ณธ
- Spark streaming์ ์ฌ์ฉ์๋ค์ด ๋ฐฐ์น ์์
์ ์ผ๋ ๊ฒ๊ณผ ์ ์ฌํ API๋ฅผ ํตํด ์คํธ๋ฆฌ๋ฐ ์ดํ๋ฆฌ์ผ์ด์
์ ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ฉฐ, ๊ธฐ์กด์ ์ผ๋ ๊ธฐ์ ๊ณผ ์ฝ๋๋ฅผ ์ฌํ์ฉํ๋ผ ์ ์๋๋ก ๋์์ค๋ค.
- Spark streaming์ DStream(Discretized stream, ์ด์ฐ ์คํธ๋ฆผ)์ด๋ผ ๋ถ๋ฆฌ๋ ์ถ์ํ ๊ฐ๋
์ ๋ฐํ์ผ๋ก ํ๋ค.
- DStream์ ์๊ฐ๋ณ๋ก ๋์ฐฉํ ๋ฐ์ดํฐ๋ค์ ์ฐ์์ ์ธ ๋ชจ์
- ๋ด๋ถ์ ์ผ๋ก๋ ๊ฐ๊ฐ์ DStream์ ๊ฐ ์๊ฐ๋ณ๋ก ๋์ฐฉํ RDD๋ค์ ์ฐ์์ ์ธ ๋ชจ์์ผ๋ก ๊ตฌ์ฑ
- DStream์ HDFS, Kafka ๋ฑ ๋ค์ํ ์
๋ ฅ ์์ค๋ก ๋ง๋ค์ด ์ง ์ ์๋ค.
- DStream์ ๋ ๊ฐ์ง ํ์
์ ์ฐ์ฐ ์ ๊ณต
- ์๋ก์ด DStream์ ๋ง๋ค์ด ๋ผ ์ ์๋ transformation
- ์ธ๋ถ ์์คํ
์ ๋ฐ์ดํฐ๋ฅผ ์จ์ฃผ๋ ๊ฒฐ๊ณผ ์ฐ์ฐ (output operation)
- DStream์ RDD์์ ๊ฐ๋ฅํ ๊ฒ๊ณผ ๋์ผํ ์ข
๋ฅ์ ๋ง์ ์ฐ์ฐ ์ง์, ์๊ฐ ๊ด๋ จ์ด๋ ์ฌ๋ผ์ด๋ฉ ์๋ ๊ฐ์ ํน๋ณํ ๊ธฐ๋ฅ๋ ์ง์
Spark streaming ์ฝ๋ฉ/๊ตฌ์ฑ
- Spark streaming์ Maven์ด๋ sbt๋ก ๋น๋๋ ๋จ์ผ ์ดํ๋ฆฌ์ผ์ด์
์ผ๋ก ๋์๊ฐ ๋ ๊ฐ์ฅ ์ ๋์๊ฐ๋ค.
- ์คํธ๋ฆฌ๋ฐ์ ์ฃผ ์์์ ์ StreamingContext๋ฅผ ์์ฑํ๋ ๊ฒ์ผ๋ก ์์.
- Java์ ๊ฒฝ์ฐ JavaStreamingContext ์์ฑ
- Batch interval : ์ผ๋ง๋ ์์ฃผ ์ฒ๋ฆฌํ๋์ง์ ๋ํ ์ค์ ์ธ ๋ฐฐ์น ๊ฐ๊ฒฉ๋ ์ค์
- ์์, ์ข
๋ฃ
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์์ํ๋ ค๋ฉด ๋ช
์์ ์ผ๋ก StreamingContext์ start() ํธ์ถ
- Spark streaming์ ๋ด๋ถ์ SparkContext์ ์คํํฌ ์์
๋ค์ ์ค์ผ์ค๋ง ์์.
- ์ด๋ ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋๋ฏ๋ก ์ฌ์ฉ์ ์ดํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋๋๋ผ๋ ์์
์ ์ ์งํ๊ธฐ ์ํด awaitTermination์ ํธ์ถํด์ผ ํ๋ค.
- StreamingContext๋ ํ ๋ฒ๋ง ์์ํ ์ ์์ผ๋ฏ๋ก DStream๊ณผ ๊ด๋ จ๋ ์ถ๋ ฅ ์ฐ์ฐ์ ๋ํ ๊ฒ๋ค์ ๋ชจ๋ ์์
ํ ํ์ ์์ํด์ผ ํ๋ค!
์ํคํ
์ฒ์ ์ถ์ํ ๊ฐ๋
- Spark streaming์ "๋ง์ดํฌ๋ก ๋ฐฐ์น micro batch"๋ผ ๋ถ๋ฆฌ๋ ์ดํคํ
์ฒ ์ฌ์ฉ
- micro barch : ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ์ ์์ ๋จ์๋ค ์์์ ๊ฐ ๋ฐฐ์น ์ฒ๋ฆฌ์ ์ฐ์์ ์ธ ํ๋ฆ์ผ๋ก ๊ฐ์ฃผ
- Spark streaming์ ๋ค์ํ ์
๋ ฅ ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ค์ฌ ์ด๊ฒ๋ค์ ์์ธ ๊ทธ๋ฃน๋ค๋ก ๋ฌถ๋๋ค
- Batch ์์ฑ ๋จ๊ณ
- ์๋ก์ด ๋ฐฐ์น๋ค์ ์ ํด์ง ์๊ฐ ๊ฐ๊ฒฉ๋ง๋ค ๋ง๋ค์ด์ง๋ค.
- ์๊ฐ ๊ฐ๊ฒฉ ๋์ ๋ฐ์๋ค์ธ ๋ฐ์ดํฐ๊ฐ ๋ฐฐ์น์ ๊ณ์ ์ถ๊ฐ
- ์๊ฐ ๊ฐ๊ฒฉ์ ๋ง์ง๋ง์๋ ๋ฐฐ์น ์ถ๊ฐ๋ฅผ ์๋ฃ
- Batch interval(์๊ฐ ๊ฐ๊ฒฉ์ ๊ธธ์ด)์ ์ค์ ์ ๋ฐ๋ผ ๊ฒฝ์
- 500ms๋ถํฐ ์ ์ด ์ฌ์ด, ๊ฐ๋ฐ์์ ์ํด ๊ฒฐ์
- ๊ฐ ์
๋ ฅ ๋ฐฐ์น๋ฅผ RDD ํํ์ด๋ฉฐ ์คํํฌ ์์
์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ RDD๋ฅผ ์์ฑํ๋๋ก ์ฒ๋ฆฌ.
- ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ ์ฌ๋ฌ ๋ฌถ์์ผ๋ก ๋๋์ด ์ธ๋ถ ์์คํ
์ ๋ณด๋ด์ง ์๋ ์๋ค.
- Spark streaming์์ ํ๋ก๊ทธ๋๋ฐ์ ์ธ ์ถ์ํ ๊ฐ๋
- DStream์ด๋ผ ๋ถ๋ฆฌ๋ RDD์ ์ฐ์์ ์ธ ๋ฌถ์
- ๊ฐ RDD๋ ํ๋ฆ ์์์ 1ํ์ฉ์ผ๋ก ์ฐ์ผ ๋ฐ์ดํฐ์ ๋ถ๋ถ์ ๊ฐ๋๋ค.
- DStream์ ์ธ๋ถ ์
๋ ฅ์์ค๋ก ๋ง๋ค์ด์ง๊ฑฐ๋, ๋ค๋ฅธ DStream์ ํธ๋์คํฌ๋ฉ์ด์
์ ์ ์ฉํ์ฌ ๋ง๋ค ์ ์๋ค.
- DStream์ ์ถ๋ ฅ ์ฐ์ฐ๋ ์ง์
- ์ธ๋ถ ์์คํ
์ ์ด๋ค๋ ์ ์ RDD์ ์ก์
๊ณผ ์ ์ฌ, Spark streaming์์ ์ด๋ ๋งค์๊ฐ ๋จ๊ณ๋ง๋ค ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋ฉฐ ์ถ๋ ฅ์ batch ๋จ์๋ก ์์ฑ
- Spark streaming์ ๊ฐ ์
๋ ฅ ์์ค๋ง๋ค receiver๋ฅผ ์คํ
- ์ด๋ ์ดํ๋ฆฌ์ผ์ด์
์ ์ต์คํํฐ๋ค ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋๊ณ RDD์ ์ ์ฅํ๋ ํ
์คํฌ๋ค. ์ด๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ฅ์ ๋์์ ์ํด ๋ค๋ฅธ ์ต์คํํฐ์ ๋ณต์ฌ.
- ์
๋ ฅ ๋ฐ์ดํฐ์ ๋ณต์ ๋ณธ์ด ์ฌ์ฉ ๊ฐ๋ฅํ, RDD๋ค์ ๊ฐ๊ณ๋๋ฅผ ์ด์ฉํ์ฌ ์ด๋ค ์ํ์์๋ผ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฐ์ฐํ ์ ์๋ค.
- Spark streaming์ ์ฒดํฌํฌ์ธํ
checkpointing ์ด๋ผ๋ ๊ฒฌ๊ณ ํ ํ์ผ ์์คํ
์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ํ๋ฅผ ์ ์ฅํ๋ ๋งค์ปค๋์ฆ์ ๋ฐ๋ก ๊ฐ๊ณ ์๋ค. (์ฅ์ ๋์์ ์ํ์ฌ)
Transformation
- DStream์ ํธ๋์คํฌ๋ฉ์ด์
์ ๋ฌด์ํ stateless์ ์ํ ์ ์ง stateful๋ก ๋๋ ์ ์๋ค.
- ๋ฌด์ํ ํธ๋์คํฌ๋ฉ์ด์
- ๊ฐ ๋ฐฐ์น์ ์ฒ๋ฆฌ๊ฐ ์์ชฝ์ ๋ฐฐ์น๋ค์ ์๋ ๋ฐ์ดํฐ์ ์๊ด์์ด ์งํ
- ์ผ๋ฐ์ ์ธ RDD์ด ํธ๋์คํฌ๋ฉ์ด์
๋ค์ด ํฌํจ
- ์ํ ์ ์ง ํธ๋์คํฌ๋ฉ์ด์
- ํ์ฌ ๋ฐฐ์น์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ด์ ๋ฐฐ์น์ ๋ฐ์ดํฐ๋ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉ
- ์ฌ๋ผ์ด๋ฉ ์๋์ ์๊ฐ๋ณ ์ํ ์ถ์ ์ ๋ฐํ์ผ๋ก ํ๋ ํธ๋์คํฌ๋ฉ์ด์
๋ค์ด ํฌํจ
- ๋ฌด์ํ ํธ๋์คํฌ๋ฉ์ด์
์ฐ์ฐ
- ์์ธํ ์ค๋ช
์ ์๋ตํ๋ค. RDD ์ฐ์ฐ๊ณผ ๊ฐ๋ค๊ณ ํ๋ค.
- ์ํ ์ ์ง ํธ๋์คํฌ๋ฉ์ด์
์ฐ์ฐ
- ์๊ฐ ๋จ๊ณ ๋ฒ์๋ฅผ ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํ๋ DStream์ ์ฐ์ฐ.
- ์ด์ ๋ฐฐ์น๋ค์ ๋ฐ์ดํฐ๊ฐ ์๋ก์ด ๋ฐฐ์น์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉ.
- ๋ ๊ฐ์ง ํ์
: ์ฌ๋ผ์ด๋ฉ ์๋์์ ๋์ํ๋ ์๋ ์ฐ์ฐ / ๊ฐ ํค์ ๋ํ ์ด๋ฒคํธ๋ค ๊ฐ์ ์ํ๋ฅผ ์ถ์ ํ๋ updateStateByKey()
- ์ํ์ ์ง ํ๋์คํฌ๋ฉ์ด์
์ ์ฅ์ ๋์์ ํ์ StreamingContext์์ ์ฒดํคํฌ์ธํ
์ ํ์ฑํ๋ฅผ ํ์๋ก ํ๋ค
- Window transformation
- ์ฌ๋ฌ ๋ฐฐ์น ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ์ StreamingContext์ ๋ฐฐ์น ๊ฐ๊ฒฉ๋ณด๋ค ํจ์ฌ ๊ธด ์๊ฐ ๊ฐ๊ฒฉ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํ๋ค.
- ๋ชจ๋ ์๋ ์ฐ์ฐ์ ๋ ๊ฐ์ ์ธ์๋ฅผ ์ฌ์ฉํ๋ค
- ์๋ ์๊ฐ(window duration), ์ฌ๋ผ์ด๋ฉ ์๊ฐ(sliding duration)
- ์ด ๋๊ฐ์ง ๊ฐ์ ๋ชจ๋ StreamingContext์ ๋ฐฐ์น ๊ฐ๊ฒฉ์ ๋ฐฐ์์ฌ์ผ ํ๋ค.
- window duration : ์ง๋๊ฐ ๋ฐฐ์น๋ฅผ ๋ช ๊ฐ๋ ์ฌ์ฉํ ์ง ์ ์ด (์๋ ์๊ฐ/๋ฐฐ์น๊ฐ๊ฒฉ), ๊ฐ์๋งํผ์ ์ต๊ทผ ๋ฐฐ์น๋ค์ ์ฌ์ฉ.
- sliding duration : ๊ธฐ๋ณธ๊ฐ์ ๋ฐฐ์น ๊ฐ๊ฒฉ๊ณผ ๋์ผ, ์ผ๋ง๋ ์์ฃผ ์๋ก์ด DStream์ด ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํ ์ง ๊ฒฐ์
- ๊ฐ์ฅ ๊ฐ๋จํ ์๋ ์ฐ์ฐ์ window(), ์์ฒญ๋ ์๋ ๋ด์ ๋ฐ์ดํฐ๋ก ์ DStream์ ๋ง๋ค์ด ๋๋๋ ค ์ค๋ค.
- updateStateByKey transformation
- DStream ์์์ ๋ฐฐ์น๋ค์ ํตํ์ด์ ์ ์ง๋๋ ์ํ ์กด์ฌ
- updateStateByKey() ํค/๊ฐ ์์ DStream์ ์ํ ์ํ ๋ณ์๋ฅผ ์ ๊ณต
- (ํค, ์ด๋ฒคํธ) ์์ด DStream์ ์ฃผ์ด์ง๋ฉด, ์ด๋ ์ ์ด๋ฒคํธ์ ์ฃผ์ด์ง ๊ฐ ํค๋ฅผ ์
๋ฐ์ดํธํ๋๋ก ์ ์๋ ํจ์๋ฅผ ๋ฐ์๋ค์ฌ ์ (ํค, ์ํ) ์์ DStream์ ๋ง๋ค ์ ์๋ค.
- updateStateByKey()๋ฅผ ์ฐ๋ ค๋ฉด ํค์ ๋ํด, ๋์ฐฉํ ์ด๋ฒคํธ์ ์ด์ ์ํ๋ฅผ ๋ฐ์๋ค์ด๋ update(events, oldState) ํจ์๋ฅผ ์์ฑํ์ฌ ์
๋ฐ์ดํธ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ newState๋ฅผ ๋๋๋ ค์ค๋ค.
- events๋ ํ์ฌ ๋ฐฐ์น์ ๋์ฐฉํ ์ด๋ฒคํธ์ ๋ชฉ๋ก์ด๋ค (์์ ์ ์์).
- oldState๋ ์ ํ์ ์ผ๋ก ์กด์ฌํ๋ ์ํ ๊ฐ์ฒด์ด๋ฉฐ Option์ ์ ์ฅ๋๋ค. ๋ง์ฝ ํค์ ๋ํด ์ด์ ์ํ๊ฐ ์์ผ๋ฉด ์์ ์ ์๋ค.
- newState๋ ํจ์์ ์ํด ๋๋๋ ค์ฃผ๊ฒ ๋๋ฉฐ, ๋ํ Option์ด๋ค. ์ํ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์๋ ์ฑ๋ก ๋๋๋ ค ์ฃผ๊ณ ์ถ์ผ๋ฉด ๋น Option์ ๋๋๋ ค์ค๋ค.
- updateStateByKey()์ ๊ฒฐ๊ณผ๋ ๋งค์๊ฐ ๋จ๊ณ๋ง๋ค์ (ํค, ์ํ) ์๋ค์ RDD๋ฅผ ๊ฐ์ง๋ ์๋ก์ด DStream์ด ๋๋ค.