Spark streaming 02 - asloud/dev_note01 GitHub Wiki
์ถ๋ ฅ ์ฐ์ฐ
- ์ถ๋ ฅ ์ฐ์ฐ์ ์คํธ๋ฆผ์์ ์ต์ข
ํธ๋์คํฌ๋ฉ์ด์
์ ๊ฒฐ๊ณผ์์ ๋ฌด์์ด ํ์ํ๊ฐ๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค.
- DStream์ ์ถ๋ ฅ ์ฐ์ฐ์ด ์๋ค๋ฉด ์ค์ ๋ก ์ฐ์ฐ์ด ์ผ์ด๋์ง ์๋๋ค. (transformation์ด ๋์ํ์ง๋ ์์), StreamingContext์ ์ถ๋ ฅ ์ฐ์ฐ์ด ์๋ค๋ฉด ์์๋ ํ์ง ์๋๋ค.
- print() : ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋๋ฒ๊น
์ถ๋ ฅ ์ฐ์ฐ
- DStream์ ๊ฐ ๋ฐฐ์น๋ง๋ค ์ฒซ 10๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ.
- save() ์ฐ์ฐ๋ค๋ ์์. ํ์ผ์ ์ ์ฅํ ๋๋ ํ ๋ฆฌ์ ์ถ๊ฐ์ ์ธ ์ ๋ฏธ์ด๋ฅผ ์ธ์๋ก ๋ฐ์๋ค์ธ๋ค.
- saveAsHadoopFiles() : ํ๋ก์ OutputFormat ๊ฐ์ฒด๋ฅผ ๋ฐ์๋ค์ธ๋ค.
- foreachRDD() :
- DStream์ด RDD๋ค์ ์์์ ์ฐ์ฐ์ ์ํํ๊ฒ ํด ์ฃผ๋ ๋ฒ์ฉ์ ์ธ ์ถ๋ ฅ ์ฐ์ฐ.
- foreachRDD() ์์์๋ ์คํํฌ์์ ๊ฐ๊ณ ์๋ ๋ชจ๋ ์ก์
์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
์
๋ ฅ์์ค
- ์ผ๋ถ ํต์ฌ ์์ค๋ค์ spark streaming ์ํฐํฉํธ ์์ ์์ง๋ง, ๋ค๋ฅธ ๊ฒ๋ค์ ์ถ๊ฐ์ ์ธ ์ํฐํฉํธ๋ฅผ maven pom.xml์ ์ถ๊ฐํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ฌ์ผ ํ๋ค.
- ํต์ฌ์์ค
- ํต์ฌ ์์ค๋ค๋ก๋ถํฐ DStream์ ์์ฑํ๋ ๋ฉ์๋๋ค์ ๋ชจ๋ StreamingContext์์ ์ฌ์ฉํ ์ ์๋ค.
- ํ์ผ, ์์ผ, Akka actor
- ํ์ผ
- ์คํํฌ๋ ๋ชจ๋ ํ๋ก ํธํ ํ์ผ ์์คํ
์์ ์ฝ๊ธฐ๋ฅผ ์ง์ํ๋ฏ๋ก spark streaming์ ํ๋ก ํธํ ํ์ผ ์์คํ
์ ํ์ผ๋ก๋ถํฐ ์คํธ๋ฆผ์ ๋ง๋๋ ๊ฒ์ ์ง์.
- ํ์ผ์ ์ผ๊ด์ฑ์ ์ ์งํด์ผ ํ๋ค (ํฌ๋งท ํฌํจ)
- ๊ทธ์ธ ์
๋ ฅ ์์ค
- ํ์ฌ ์ฌ๋ฌ ๋ฆฌ์๋ฒ๋ฅผ ์ง์
- ํธ์ํฐ(Twitter), ์ํ์น ์นดํ์นด(Apache kafka), ์๋ง์กด ํค๋ค์์ค(Amazon Kinesis), ์ํ์น ํ๋ผ(Apache Flume), ์ ๋กMQ(ZeroMQ) ๋ฑ์ ์ง์ํ๋ค.
- ์ถ๊ฐ์ ์ธ ๋ฆฌ๋น์๋ค์ ๋ฉ์ด๋ธ ์ํฐํฉํธ์ ์ถ๊ฐํ์ฌ ํฌํจํ ์ ์๋ค.
- Apache Kafka
- ์ํ์น ์นดํ์นด๋ ์๋์ ์ ์ฐํจ ๋๋ฌธ์ ์ธ๊ธฐ์๋ ์
๋ ฅ์์ค.
- ์นดํ์นด์ ๋ด์ฅ ์ง์ ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ๋ง์ ํ ํฝ์ ๋ํ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์นดํ์นด ์คํธ๋ฆผ, ์นดํ์นด ๋ค์ด๋ ํธ ์คํธ๋ฆผ ์ ๊ณต
- KafkaUtils ๊ฐ์ฒด
- StreamingContext, JavaStreamingContext์์ ๋์ํ๋ฉฐ ์นดํ์นด ๋ฉ์ง์ DStream์ ์์ฑํ๋ค.
- KafkaUtils์ createStream ๋ฉ์๋ ์ฌ์ฉ
- ์นดํ์นด ์คํธ๋ฆผ
- ์นดํ์นด์์ ๋ฉ์์ง๋ฅผ ์์ ํ๋ ๋ฐฉ์ (๋ง์ด ์์ , ์ผ์ข
์ polling)
- (Java)StreamingContext, ์ฃผํคํผ ํธ์คํธ ๋ชฉ๋ก, ๋ฉ์์ง consumer ๊ทธ๋ฃน ์ด๋ฆ, ํ ํฝ ๋ชฉ๋ก, ๋ฆฌ์๋ฒ ์ค๋ ๋ ์ ๋ฑ์ผ๋ก ๊ตฌ์ฑ
- ์นดํ์นด ๋ค์ด๋ ํธ ์คํธ๋ฆผ (3DVS์์ ์ด ๋ฐฉ์ ์ฌ์ฉ)
- ์นดํ์นด์์ ์ง์ (Direct) ๋ฉ์์ง๋ฅผ ์ฝ๋ ๋ฐฉ์
- ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฝ์ผ๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ค์ ๋ณต์ ํ ํ์ ์๊ณ , ์คํจํ๋ฉด ๊ทธ๋ง
- ์คํธ๋ฆผ์ ์ฐ๊ฒฐํ ํ์ ์์ด ์ฌ๋ฌ๊ฐ์ ๋ฆฌ๋๋ฅผ ์คํํ ์ ์๊ฒ ํ๋ค.
- ์ฃผํคํผ ํธ์คํธ ๋ชฉ๋ก์ ์ง์ ์ ๊ณตํ์ง ์๊ณ ์นดํ์นด ๋ธ๋ก์ปค ๋ชฉ๋ก์ ์ง์ ๋ฃ์ด์ค๋ค.
- ์ฌ์ฉํ ์ค๋ ๋ ๊ฐ์๋ฅผ ์ง์ ํ ํ์๋ ์๋ค
์ฌ๋ฌ ์
๋ ฅ์์ค ์ฌ์ฉ, ํด๋ฌ์คํฐ ์ฌ์ด์ง
- union() ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ DStream์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ์ด๋ฐ ์ฐ์ฐ์ผ๋ก ์
๋ ฅ DStream์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณํ ์ ์๋ค.
- ๊ฐ๋ ์ฌ๋ฌ๊ฐ์ ๋ฆฌ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌ๋์ ๋๋ฆฌ๊ธฐ ์ํด์ ํ์ํ๋ค. / ์๋ฒ ๋ค๋ฅธ ์์ค๋ค์ ๋์์ผ๋ก ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ค์ด๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ํฉ์น๊ธฐ๋ ํ๋ค.
- ๊ฐ ๋ฆฌ์๋ฒ๋ ์คํํฌ์ ์ต์คํํฐ ๋ด์์ ์ง์์ ์ผ๋ก ์คํ ์ค์ธ ํ์คํฌ๊ฐ ๋์ด ๋์๊ฐ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ฆฌ์๋ฒ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ํ ๋น๋ CPU ์ฝ์ด๋ฅผ ์ฐจ์งํ๊ฒ ๋๋ค. ๋ฆฌ์๋ฒ๊ฐ ์ฌ์ฉํ๋ ๊ฒ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ฝ์ด๋ ํ์ํ๋ค.
- ์ฌ๋ฌ๊ฐ์ ๋ฆฌ์๋ฒ๋ฅผ ์ค์ํ๊ธฐ ์ํด ์ต์ ๋ฆฌ์๋ฒ ๊ฐ์๋งํผ์ ์ฝ์ด๊ฐ ํ์ํ๋ฉฐ, ์ถ๊ฐ๋ก ์ฐ์ฐ์ ์ํ ์ฝ์ด๊ฐ ํ์ํ๋ค.
24/7 ์ด์ (๋ฌด์ค๋จ ์ด์)
- Spark streaming์ ์ฃผ๋ ์ฅ์ ์ ๊ฐ๋ ฅํ ์ฅ์ ๋ด๊ตฌ์ฑ์ ๋ณด์ฅํ๋ ๋ฅ๋ ฅ์ด๋ค.
- ์
๋ ฅ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์ผ๋ก ์ ์ฅ๋์ด ์๋ ํ Spark streaming์ ์ธ์ ๋ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
- ์ฌ์ง์ด ๋๋ผ์ด๋ฒ๋ ์์
๋
ธ๋์ ์ฅ์ ๊ฐ ์๊ฒจ๋ "๋ฑ ํ๋ฒ ๋ง์" ์ฝ์
ํธ๋ฅผ ์ ๊ณตํ๋ค.
- 24/7๋ก ์คํํ๋ ค๋ฉด ๋ช ๊ฐ์ง ํน์ํ ์ค์ ํ์
- ์์ ์ ์ธ ์ ์ฅ ์์คํ
์ checkpointing ์ค์ , ๋๋ฌ์ด๋ฒ ํ๋ก๊ทธ๋จ์ ์ฅ์ ๋์์ ๋ํด์๋ ๊ณ ๋ ค, ์์ ์ ์ด์ง ์์ ์
๋ ฅ ์์ค์ ๋ํ ๊ณ ๋ ค๋ ํ์
- Checkpointing
- ์ฒดํฌํฌ์ธํ
์ ์คํํฌ ์คํธ๋ฆฌ๋ฐ์์ ์ฅ์ ๋์์ ์ํด ๊ตฌ์ถํ ํ์๊ฐ ์๋ ํต์ฌ ๋งค์ปค๋์ฆ.
- ์คํํฌ ์คํธ๋ฆฌ๋ฐ์ด ๋ณต๊ตฌ๋ฅผ ์ํด ์์ ์ ์ธ ํ์ผ ์์คํ
์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฒ ํด์ค๋ค
- ๋ ๊ฐ์ง ๋ชฉ์ ์ผ๋ก ์ ๊ณต
- ์ฅ์ ์ ์ฌ์ฐ์ฐ์ด ํ์ํ ์ํฉ์ ์ ํํ๋ค. ์ฒดํฌํฌ์ธํ
์ ์ํ๋ฅผ ์ฌ์ฐ์ฐํ๋ ๊ฒ์ ์ํด ์ผ๋ง๋ ๋ง์ด ๋๋๋ฆด์ง๋ฅผ ์ ์ดํ๋ค.
- ๋๋ผ์ด๋ฒ์ ๋ํด ์ฅ์ ๋์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ํ๋ก๊ทธ๋จ์ด ์ฃฝ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์คํ์ํค๊ณ ๋ณต๊ตฌํ๋๋ก ์์ฒญํ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์ด์ ์ ์คํ๋ ์ฒดํฌํฌ์ธํธ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ณต๊ตฌํ ๊ฒ์ด๋ค.
- ๋ก์ปฌ ํ์ผ ์์คํ
์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
- ๋๋ผ์ด๋ฒ ์ฅ์ ๋์
- ๋๋ผ์ด๋ฒ ๋
ธ๋์ ์ฅ์ ์ ๋์ํ๋ ๊ฒ์ StreamingContext ์์ฑ ์ ์ฒดํฌํฌ์ธํ
๋๋ ํ ๋ฆฌ๋ฅผ ๋ฐ์๋ค์ด๋๋ก ํ๋ ๋ฐฉ๋ฒ ํ์
- new StreamingContext() ํธ์ถ ๋์ , StreamingContext.getOrCreate() ํจ์ ์ฌ์ฉ
- ์ฒดํฌํฌ์ธํธ ๋๋ ํ ๋ฆฌ๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด StreamingContext ์์ฑ, ๋๋ผ์ด๋ฒ๊ฐ ์ฅ์ ๊ฐ ๋์ ์ฌ์์ ํ ์ด ์ฝ๋๊ฐ ์คํ๋๋ฉด ์ฒดํฌํฌ์ธํธ ๋๋ ํ ๋ฆฌ๋ก๋ถํฐ StreamingContext๋ฅผ ๋ค์ ์ด๊ธฐํํ๊ณ ์ฒ๋ฆฌ๋ฅผ ๊ณ์ ์งํ
- ๋๋ผ์ด๋ฒ ์ฌ์คํ
- ๋๋ผ์ด๋ฒ ํ๋ก๊ทธ๋จ์ด ์ฃฝ์ผ๋ฉด ์๋์ผ๋ก ์ฌ์คํํ๋๊ฒ์ด ํ์
- ๋จ๋
ํด๋ฌ์คํฐ ๋งค๋์ ์ ๊ฒฝ์ฐ, ๋๋ผ์ด๋ฒ๋ฅผ ์ ์ถํ ๋ --supervise ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์คํํฌ๊ฐ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์์ํ๋๋ก ํ ์ ์๋ค.
- --deploy-mode cluster ์ง์ ํ์ฌ ๋๋ผ์ด๋ฒ๊ฐ ๋ก์ปฌ ๋จธ์ ์ด ์๋ ํด๋ฌ์คํฐ ๋ด์์ ์คํ๋๋๋ก ํด์ค ํ์๋ ์๋ค.
- ์ฌ์คํ๋ ๋๋ผ์ด๋ฒ๋ ๋ฉ์ถ ์ง์ ๋ถํฐ ๋์ํ๋๋ก ์๋ก์ด ์ต์คํํฐ๋ฅผ ์์ํ ๊ฒ์ด๋ค.
- ์์
๋
ธ๋ ์ฅ์ ๋ด๊ตฌ์ฑ
- ์คํํฌ ์คํธ๋ฆฌ๋ฐ์ ์์
๋
ธ๋ ์ฅ์ ๋์์ ์คํํฌ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋น์.
- ์ธ๋ถ ์์ค๋ก๋ถํฐ ๋ฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์คํํฌ ์์
๋
ธ๋ ๊ฐ์ ๋ณต์ ๋๋ค.
์ด ๋ณต์ ๋ ์
๋ ฅ ๋ฐ์ดํฐ๋ ํธ๋์คํฌ๋ฉ์ด์
์ผ๋ก ์์ฑ๋ ๋ชจ๋ RDD ๊ฐ๊ณ๋๋ฅผ ํตํ์ฌ ์
๋ ฅ ๋ฐ์ดํฐ์ ์ด์์๋ ๋ณต์ ๋ณธ์ผ๋ก๋ถํฐ ์ ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์์คํ
์ด ์ฌ์ฐ์ฐํ ์ ์์ผ๋ฏ๋ก ์ฅ์ ์ ๋ํด ๋ด์ฑ์ด ๋๋ค.
- ๋ฆฌ์๋ฒ ์ฅ์ ๋ด๊ตฌ์ฑ
- ๋ฆฌ์๋ฒ๊ฐ ๋์ ์ค์ธ ์์
๋
ธ๋์ ์ฅ์ ๋ด๊ตฌ์ฑ์ ์ค์ํ ์ด์
- ์ฅ์ ์์ ์คํํฌ ์คํธ๋ฆฌ๋ฐ์ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋
ธ๋์์ ์คํจํ ๋ฆฌ์๋ฒ๋ฅผ ์ฌ์์ํ๋ค.
- ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์๋์ง๋ ์
๋ ฅ ์์ค์ ๋์ ๋ฐฉ์๊ณผ ๋ฆฌ์๋ฒ์ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
- ๋ฆฌ์๋ฒ๋ค์์ ๋ณดํต ๋ณด์ฅํ๋ ๊ฒ๋ค
- ์์ ์ ์ธ ํ์ผ ์์คํ
(์, HDFS)์์ ์ฝ์ด ์จ ๋ชจ๋ ๋ฐ์ดํฐ๋ ํด๋น ํ์ผ ์์คํ
์ด ๋ณต์ ๊ธฐ๋ฐ์ด๋ฏ๋ก ์์ ์ ์ด๋ค. ์คํํฌ ์คํธ๋ฆฌ๋ฐ์ ์ฒดํฌํฌ์ธํธ๋ก ์ด๋ ๋ฐ์ดํฐ๊น์ง ์ฒ๋ฆฌ๋์๋์ง ๊ธฐ์ตํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ค๋ฅด๋ฉด ๋๋ ์ดํ๋ถํฐ ์ฒ๋ฆฌ.
- ๋ฆฌ์๋ฒ ๊ธฐ๋ฐ์ ๊ฐํฌ์นด๋ ํธ์ ๊ธฐ๋ฐ์ ํ๋ผ ๋ฑ์ ์์ ์ ์ด๋ ์์ ์์ค์ ๋ํด์๋ ์คํํฌ์์ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ์ง๋ง, ๋ฆฌ์๋ฒ ํ์คํฌ๊ฐ ์ผ์ ๋ค์ด๋๋ฉด ๋ฐ์ดํฐ ์ ์ค ์ํ์ด ์๋ค.
- ์คํํฌ 1.2๋ถํฐ HDFS์ ๊ฐ์ ์์ ์ ์ธ ํ์ผ ์์คํ
์ ๋ก๊น
์ด ๊ฐ๋ฅํด์ ธ ๋๋ผ์ด๋ฒ ์ฌ์์์ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ ์ ์ค ์ํ์ ์์ด์ก๋ค.
- ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋์๋ค๋ ๊ฒ์ ํ์ธํ๊ธฐ ์ํ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์์ ์ ์ธ ์
๋ ฅ ์์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- ์์ ์ ์ด์ง ์์ ์
๋ ฅ ์์ค๋ฅผ ๊ฐ๊ณ ์๊ณ , ๋ฐ์ดํฐ ์ ์ค์ ํผํ๊ณ ์ถ๋ค๋ฉด
- spark.streaming.receiver.writeAheadLog.enable์ true๋ก ์ค์ ํ์ฌ WAS(Write-Ahead Logging)์ ํ์ฑํํด์ผ ํ๋ค.
- ์์
์ฒ๋ฆฌ์ ๋ํ ๋ณด์ฅ
- ์คํํฌ ์คํธ๋ฆฌ๋ฐ์ ์์
๋
ธ๋ ์ฅ์ ๋ด๊ตฌ์ฑ์ ๋ํ ๋ณด์ฅ ๋ํ์ ๋ชฏใด ํธ๋์คํฌ๋ฉ์ด์
์ ๋ํด "๋ฑ ํ๋ฒ ์ฒ๋ฆฌ(exactly once)" ์ปจ์
์ ๊ณต์ด ๊ฐ๋ฅํ๋ค.
- ์ถ๋ ฅ ์ฐ์ฐ์ ํตํ์ฌ ์ธ๋ถ ์์คํ
์ ๋ณด๋ด์ง ๋๋ ํ์คํฌ์ ์ค๋ฅ๋ก ์ฌ๋ฌ๋ฒ ์คํ๋ ์ ์๋ค.
- ํธ๋์ญ์
, ๋ฉฑ๋ฑ์ฐ์ฐ ๋ฑ์ ์ค๊ณ๊ฐ ํ์ํ๋ค -> ๊ทธ๋ฌ๋๊น ์ ๋ง๋ค์ด๋ผ...
์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ
- ์คํํฌ ์คํธ๋ฆฌ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ช ๊ฐ์ง ํนํ๋ ์ฑ๋ฅ ์ต์ ํ ์ต์
์ ๊ฐ๊ณ ์๋ค.
- ๋ฐฐ์น/์๋ ํฌ๊ธฐ
- ์ด๋ ์ ๋์ ์ต์ ๋ฐฐ์น๊ฐ ์คํํฌ ์คํธ๋ฆฌ๋ฐ์ ์ ๋นํ๊ฐ??? ==> 500ms๊ฐ ์ต์ ์ ์ต์ ํฌ๊ธฐ๋ก ํ๋ช
- ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ํฐ ๋ฐฐ์น ํฌ๊ธฐ๋ก ์์ํ์ฌ ์์ ์ฌ์ด์ฆ๋ก ๋ฎ์ถฐ ๊ฐ๋ฉด์ ํ
์คํธ ์งํํ์ฌ ํ์ธ
- ์๋ ์ฐ์ฐ๋ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ์ฌ ๊ฐ๊ฒฉ์ด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
- ๋ณ๋ ฌํ ์์ค
- ๋ฐฐ์น์ ์ฒ๋ฆฌ ์๊ฐ์ ์ค์ด๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ณ๋ ฌํ ์์ค์ ์ฌ๋ฆฌ๋ ๊ฒ. ๋ณ๋ ฌํ ์์ค์ ์ฌ๋ฆฌ๋ ๋ฐ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- ๋ฆฌ์๋ฒ ๊ฐ์ ๋๋ฆฌ๊ธฐ
- ๋ฆฌ์๋ฒ๋ ํ๋์ ๋จธ์ ์ผ๋ก ๋๋ฌด ๋ง์๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋ถ๋ฐฐํ๋ค๋ฉด ๋ณ๋ชฉํ์์ด ๋ํ๋ ์ ์๋ค.
- ์ฌ๋ฌ ๊ฐ์ ์
๋ ฅ DStream์ ๋ง๋ค์ด ๋ฆฌ์๋ฒ๋ฅผ ์ถ๊ฐํ๊ณ , union์ ์ ์ฉํ์ฌ ํฉ์ณ์ ๋จ์ผ ์คํธ๋ฆผ์ผ๋ก ๋ณด๋ด์ฃผ๋ฉด ๋๋ค.
- ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ช
์์ ์ผ๋ก ์ฌํํฐ์
๋
- ๋ฆฌ์๋ฒ๋ฅผ ๋๋ฆฌ๊ธฐ ํ๋ค๋ค๋ฉด DStream.repartition์ ์ฌ์ฉํ์ฌ ์
๋ ฅ ์คํธ๋ฆผ์ ์ฌํํฐ์
๋ํ์ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐฐ์นํ๋ค.
- ์งํฉ ์ฐ์ฐ ์ ๋ณ๋ ฌํ ๊ฐ์ ๋๋ฆฌ๊ธฐ
- reduceByKey() ๊ฐ์ ํจ์๋ฅผ ์ฌ์ํ ๋ ๋ณ๋ ฌํ ์ ๋ ์ง์ .
- ๊ฐ๋น์ง ์ปฌ๋ ์
๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
- ์์์น ๋ชปํ ์ด์/๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๋ถ๋ถ์ Java์ GC ๋ถ๋ถ.
- ์๋ฐ์ ๋ณ๋ ฌ ๋งํฌ ์ค์(Concurrent-Mark-Sweep) ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ธก๋์ง ์์ GC์ ์ํ ์ผ์ ์ ์ง๋ฅผ ์ต์ํํ ์ ์๋ค.
- ๋ณ๋ ฌ ๋งํฌ ์ค์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ ์ฒด์ ์ผ๋ก ์์์ ์ข ๋ ์ฌ์ฉํ์ง๋ง ์ผ์์ ์ง ์ํ๋ฅผ ์ค์ฌ์ค๋ค.
- GC๋ spark.executor.extraJavaOptions์ ์ค์ ์์ -XX:+UseConcMarkSweepGC๋ฅผ ์ถ๊ฐํ์ฌ ์ ์ดํ ์ ์๋ค.
- spark-submit --conf spark.executor.extraJavaOptions=-XX:+UseConcMarkSweepGC App.jar
- GC์ ๋ถ๋ด์ ์ค์ฌ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์๋ ์๋ค.
- ์ง๋ ฌํ ํํ๋ก RDD๋ฅผ ์บ์ฑํ๋ ๊ฒ ๋ํ GC ๋ถํ์ ์ค์ฌ์ค๋ค. => ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํํฌ ์คํธ๋ฆฌ๋ฐ์ ์ํด ์์ฑ๋ RDD๋ ์ง๋ ฌํ ์ฑํ๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ.
- ์นด์ด๋ก(Kyro) ์ง๋ ฌํ๋ฅผ ์ฌ์ฉํ๋ ใด๊ฒ์ด ์บ์๋ ๋ฐ์ดํฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ฑ ์ค์ฌ์ค๋ค.
- ์คํํฌ๋ ์บ์ ๋๋ ์์ํ๋ RDD๊ฐ ์บ์๋ก๋ถํฐ ์ญ์ ๋ ์ง๋ฅผ ์ฌ์ฉ์๊ฐ ์ ์ดํ ์ ์๋๋ก ํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ์คํํฌ๋ LRU ์บ์๋ฅผ ์ฌ์ฉํ๋ค. ๋ง์ฝ spark.cleaner.ttl์ ์ค์ ํ๋ค๋ฉด ์คํํฌ๋ ํน์ ์๊ฐ์ด ์๋ RDD๋ฅผ ๋ชจ๋ ์ญ์ ํ ์๋ ์๋ค.
- ์บ์์์ ์ฌ์ฉ๋์ง ์์ ๊ฒ ๊ฐ์ RDD๋ฅผ ๋ฏธ๋ฆฌ ์ญ์ ํจ์ผ๋ก์จ GC์ ๋ถ๋ด์ ์ค์ผ ์ ์๋ค.