Spark Core
RDD, Lazy Execution, Distributed Data Processing, Transformation
RDD (Resilient Distributed Dataset)
RDD ๋ ๋ถ์ฐํ๊ฒฝ์์ ์์ปค๋ ธ๋์ ํํฐ์ ๋์ด ์๋ ๋ถ์ฐ๊ฐ์ฒด์ด๋ค. ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๊ณ , ์ฐ์ฐ ์์๋ฅผ ๊ธฐ์ตํ๊ณ ์์ด์ ํํฐ์ ์ด ๊นจ์ง๋ฉด ๋ค์ ๋ณต๊ตฌํ ์ ์๋ ์ฅ์ ๋ณต๊ตฌ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
RDD ๋ ๋ด๊ณ ์ฅ์ฑ(fault-tolerant) ๋ฐ์ดํฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ค๊ฐ์ฐ์ถ๋ฌผ์ ์ ์ฅํ ์ ์๊ณ , RDD ์์ ์ ๊ณตํ๋ API ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์๋ค. ๋ณดํต Low-level transformation API, Action API ์ฌ์ฉํด์ผ ํ๊ฑฐ๋, ๋น์ ํ ๋ฐ์ดํฐ(unstructured data)๋ฅผ ์ฒ๋ฆฌํ ๋ RDD๋ฅผ ์ฌ์ฉํ๋ค. ์ ํ ๋ฐ์ดํฐ(structured data)๋ฅผ ์ฒ๋ฆฌํ ๋๋ Dataset์ ์ฌ์ฉํ๋ค.

Lazy Execution
Lazy Execution์ RDD ๊ฐ ์ด๋ป๊ฒ ๋ง๋ค์ด์ง๋์ง Lineage ์ ๋ณด๋ฅผ ๋จผ์ ๋ง๋ค๊ณ Job ์ ์คํํ๊ธฐ ๋๋ฌธ์ ์์์ ๊ณ ๋ คํด์ ์ต์ ์ Job์ ์คํํ ์ ์๋ค.
Driver ์ฝ๋๋ฅผ ์์ฑํ๊ณ Spark ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด, Driver ๋ ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ Transformation ์ฝ๋๋ก Job ์คํ๊ณํ(Execution Plan, Lineage ์ ๋ณด)์ ์ธ์ด ํ, Action ์ฝ๋๋ฅผ ์ํํ์ฌ Job ์ ์คํํ๋ค.

Distributed Data Processing
Spark์์ ํ์ผ์์คํ ์ผ๋ก HDFS์ ๊ฐ์ ๋ถ์ฐํ์ผ์์คํ ์ ์ฌ์ฉํ๋ฉด, ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ํํฐ์ ์ผ๋ก ์ชผ๊ฐ์ ธ์ ๋ถ์ฐ๋์ด ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ํํฐ์ ๋ง๋ค Transformation ์์ ์ ์ํํ ์ ์๋ค. ์์ ์ Data Locality๋ฅผ ๊ณ ๋ คํด ํํฐ์ ๋ณ๋ก ์ํ๋๋ฉฐ, Shuffle์ด ํ์ํ ๊ฒฝ์ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ๋จธ์ ์ผ๋ก ์ ์ก๋๋ค.

Narrow vs Wide transformation
RDD ๋ Transformation API(map, filter, join, etc)๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ๋์ด ์๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์๋ค.
Narrow transformation API ๋ ์ ํ๋งํ์ง ์๊ณ ์์ ๋ ธ๋์ ์๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ง๊ณ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๋ฉฐ, ํํฐ์ ์ด ๊นจ์ ธ๋ ์์ ๋ ธ๋์์ ๋ณต์์ด ๊ฐ๋ฅํ๋ค.
Wide transformation ์ ์ ํ๋ง์ด ํ์ํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๊นจ์ก์ ๋ Network IO ๋น์ฉ์ด ๋ฐ์ํ๋ค. Wide transformation API๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ฒดํฌํฌ์ธํธ ํด์ฃผ๋ ๊ฒ์ด ์ข์ ์ ์๋ค.
์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด์๋ Wide transformation API ๋ ์ฃผ์ ๊น๊ฒ ์ฌ์ฉํด์ผ ํ๋ฉฐ Narrow transformation API๋ฅผ ์ต๋ํ ํ์ฉํด์ผ ํ๋ค.
Narrow, Wide transformation ๊ณผ action API(Operation)์ ๋ํด ์์๋ณด์.

์ฐธ๊ณ ์๋ฃ
http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-1/
Last updated
Was this helpful?