[Spark] Apache Spark๋?
๐ Apache Spark๋?
Apache Spark
๋ ๋น
๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ถ์ ์์ง์ด๋ค. Hadoop
์ MapReduce
๊ฐ ๋์คํฌ ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด, Spark๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ๋ณ๋ ฌ ์ฐ์ฐ์ ์งํํ๋ค.
์ผ๋ฐ์ ์ผ๋ก Spark๊ฐ Hadoop MapReduce๋ณด๋ค 100๋ฐฐ ์ ๋ ๋น ๋ฅด๋ค.
๐ ํน์ง
- ๋ฐฐ์น ํ๋ก์ธ์ฑ์ ํตํด ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์คํธ๋ฆฌ๋ฐ ํ๋ก์ธ์ฑ์ ํตํด ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. Spark์
Structured Streaming
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๊ณ์ํด์ ํ์ด ์ถ๊ฐ๋๋ ๋ฌดํํ ํ ์ด๋ธ๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์, ์ค์๊ฐ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์์ ๋จ์๋ก ๋๋์ด ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. - ๋ถ์ฐ ํด๋ฌ์คํฐ ์ปดํจํ
์ ํตํด ์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋ค. Spark๋ ๋์ง ์์ ์คํ์ ๋
ธ๋๋ค์ ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐํ์ฌ ํ๋์ ๊ฑฐ๋ํ ๋
ธ๋์ฒ๋ผ ์ฌ์ฉํ๋ค. ์ด๋ฅผ
scale-out
์ด๋ผ๊ณ ํ๋ค. HDFS
,S3
๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ฅ์์ ํตํฉ๋ ์ ์๋ค. Spark ์์ฒด๋ ๊ณ์ฐ๋ง ๋ด๋นํ๋ฉฐ, ํน์ ์ ์ฅ์์ ์ข ์๋์ง ์๋๋ค. ์ฆ, Spark๋ ๊ณ์ฐ ์์ง๊ณผ ์ ์ฅ์๊ฐ ๋ถ๋ฆฌ๋์ด ์๋ค.- ํ์ด์ฌ, ์ค์นผ๋ผ, R, SQL ๋ฑ๊ณผ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ค.
- ๋ฐฐ์น ํ๋ก์ธ์ฑ๊ณผ ์คํธ๋ฆฌ๋ฐ ํ๋ก์ธ์ฑ์
wrapper
๋ง ์์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ๋ฐฐ์น ๋ฐ์ดํฐ ๋ก์ง๊ณผ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ก์ง์ด ๊ฑฐ์ ๋์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ๊ตฌ์กฐ
ํ๋์ ํด๋ฌ์คํฐ๋ ํ๋์ master node
์ ์ฌ๋ฌ ๊ฐ์ worker node
๋ก ๊ตฌ์ฑ๋๋ค.
์ ๊ทธ๋ฆผ์์ ์ผ์ชฝ ๋ ธ๋๊ฐ master node์ด๋ค.
cluster manager๋ ์ ์ฒด ํด๋ฌ์คํฐ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ ๋ถ๋ฐฐํ๋ค.
master node๋ driver ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ค. ์์ฑํ ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ plan์ ์๋ฆฝํ๋ฉฐ, worker node์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ค.
๋ฐ๋ฉด worker node๋ executor ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ค. master node๋ก๋ถํฐ ํ ๋น๋ฐ์ ์์ ์ ์ํํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ฉฐ, ๋ค๋ฅธ worker node์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ๋ก์ธ์ค
- ์ฌ์ฉ์๊ฐ Spark ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฉด ๋จผ์ driver ํ๋ก์ธ์ค๊ฐ ์์๋๋ค. ๋๋ผ์ด๋ฒ ๋ด๋ถ์
SparkContext
๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.SparkContext
๊ฐ์ฒด๋ Spark ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ํ entrypoint์ด๋ค. SparkContext
๊ฐYARN
,k8s
์ ๊ฐ์ ํด๋ฌ์คํฐ ๋งค๋์ ์ ํต์ ํ์ฌ ํ์ํ ์์์ ์์ฒญํ๋ค. ํด๋ฌ์คํฐ ๋งค๋์ ๋ ์์ฒญ์ ๋ฐ๊ณ ์ฌ๋ฌ worker node์ ์์์ ํ ๋นํ๊ณ worker node ์์์ executor ํ๋ก์ธ์ค๋ฅผ ์คํ์ํจ๋ค.- executor๊ฐ ์คํ๋๋ฉด driver์๊ฒ ์์ ์ ์์น๋ฅผ ๋ฑ๋กํ๋ค. ์ฆ, ๋๋ผ์ด๋ฒ๋ ์ด ์์ ์ ์ด๋ค executor๊ฐ ์ด๋์ ๋์ํ๋์ง ์๊ฒ ๋๋ค. ์ฌ์ฉ์์
action
์ด ํธ์ถ๋๋ฉด ๋๋ผ์ด๋ฒ๋ ์ด๋ฅผjob
์ผ๋ก ๋ณํํ๊ณ ์ฌ๋ฌ ๊ฐ์stage
๋ก ๋๋๋ค. ๊ฐstage
๋ ์ฌ๋ฌ ๊ฐ์task
๋ก ์ชผ๊ฐ์ง๋ค. ๋๋ผ์ด๋ฒ๋ ์ดtask
๋ฅผ executor์ ์ง์ ์ ๋ฌํ์ฌ ์คํ์ ์ง์ํ๋ค. - ๊ฐ๊ฐ์ executor๋ ํ ๋น๋ฐ์ ํ์คํฌ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋๋ผ์ด๋ฒ์ ๋ณด๊ณ ํ๋ค.
๊ฐ๊ฐ์ executor๋ ์์ ์ด ๊ณ์ฐํ ํํฐ์ ์ ์์ ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ์ ์บ์ฑํ๋๋ฐ, ์ด๋ฅผ ํตํด ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ํฅ์๋๋ค.
groupby
, join
๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ์ ์ฌ๋ถ๋ฐฐ๊ฐ ํ์ํ ์ฐ์ฐ์ ์ํํ ๋ ๊ฐ executor๋ ๋ค๋ฅธ executor์ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ฐ, ์ด ๊ณผ์ ์ shuffling
์ด๋ผ๊ณ ํ๋ค. ๋ค๋ง shuffling
์ ๋์คํฌ I/O์ ๋คํธ์ํฌ ํต์ ๋ชจ๋ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ํฐ ์ฐ์ฐ์ด๋ฉฐ, ์ด๋ฅผ ์ต์ํํ๋ ๊ฒ์ด Spark ์ฑ๋ฅ ํ๋์ ํต์ฌ์ด๋ค.
groupby
๋join
์ ๊ด๋ จ ์๋ ๋ฐ์ดํฐ๋ผ๋ฆฌ ํ ๊ณณ์ ๋ชจ์์ผ ํ๋ ์ฐ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ฌ๋ถ๋ฐฐ๊ฐ ํ์ํ ๊ฒ์ด๋ค.
ํด๋ฌ์คํฐ์ ์ข ๋ฅ
- ์จํ๋ ๋ฏธ์ค ํด๋ฌ์คํฐ๋ ์์ฒด์ ์ธ ๋ฐ์ดํฐ ์ผํฐ์ ๋ฌผ๋ฆฌ์ ์๋ฒ๋ฅผ ํตํด ์ง์ ๊ตฌ์ถํ๋ ํด๋ฌ์คํฐ์ด๋ค. ์ด๊ธฐ ๋น์ฉ์ ๋์ผ๋ ์ดํ ์ถ๊ฐ์ ์ธ ์ธํ๋ผ ๋น์ฉ์ ๊ฑฐ์ ์์ผ๋, ์ง์ ์ ์ง๋ณด์ํด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.
- ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ AWS EMR, Google Dataproc, Azure HDInsight์ ๊ฐ์ด ํด๋ผ์ฐ๋ ๋ฒค๋์์ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ํตํด ์ฌ์ฉํ๋ ํด๋ฌ์คํฐ์ด๋ค. ํ์ฅ์ฑ์ด ์ข๊ณ ๊ด๋ฆฌ ์ธก๋ฉด์์ ํธ๋ฆฌํ๋, ์ง์์ ์ธ ์ด์ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
- ํ์ด๋ธ๋ฆฌ๋ ํด๋ฌ์คํฐ๋ ์จํ๋ ๋ฏธ์ค์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ฅผ ํผ์ฉํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ์์๋ ์จํ๋ ๋ฏธ์ค ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๋ค, ํธ๋ํฝ ํผํฌ๊ฐ ๋ฐ์ํ๋ฉด ํด๋ผ์ฐ๋๋ก๋ถํฐ ์ถ๊ฐ ๋ ธ๋๋ฅผ ์์๋ก ๋์ฌํ์ฌ ํ์ฅ์ฑ์ ์ฑ๊ธด๋ค.
ํด๋ฌ์คํฐ์ ์ฅ์
- ๋ณ๋ด ์ฒ๋ฆฌ ๋ฐฉ์์ ํตํด ์์ ์ํ ์๊ฐ์ ๋จ์ถ์ํฌ ์ ์๋ค.
- scale-out ๋ชจ๋ธ์ ์ฑํํ๋ฏ๋ก ์๋์ ์ผ๋ก ๋น์ฉ์ด ์ ๋ ดํ๋ฉฐ, ์ํ์ ์ผ๋ก ๋ ธ๋๋ฅผ ์ถ๊ฐํ ์ ์์ด ์ ์ฐํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
- ํน์ ๋
ธ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ์๋์ผ๋ก ๋ค๋ฅธ ๋
ธ๋๊ฐ ๊ทธ ์์
์ ๋์ ์ํํ์ฌ ์์ ์ฑ์ ์ ์งํ๋ค. ์ด๋ฅผ
Fault Tolerance
๋ผ๊ณ ํ๋ค.
YARN ์ํคํ ์ฒ
ResourceManager
๋ master node์์ ์คํ๋๋ค. ํด๋ฌ์คํฐ์ ๋ชจ๋ ์์์ ๊ด๋ฆฌํ๋ฉฐ ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์์์ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ค.NodeManager
๋ slave node์์ ์คํ๋๋ฉฐ, ์์ ์ด ์ํ ๋ ธ๋์ ์์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ResourceManager์๊ฒ ๋ณด๊ณ ํ๊ณ , ResourceManager์ ๋ช ๋ น์ ๋ฐ์Container
๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋ค.ApplicationMaster
๋ ์ ํ๋ฆฌ์ผ์ด์ ๋น ํ๋ ์กด์ฌํ๋ ์ปจํ ์ด๋๋ก, ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ResourceManager๋ฅผ ํตํด ํ์ํ ์ปจํ ์ด๋๋ฅผ ํ ๋น๋ฐ๊ณ , ํด๋น ์ปจํ ์ด๋์ task๊ฐ ์คํ๋๋๋ก NodeManager์ ์์ฒญํ๋ค.Container
๋ NodeManager๊ฐ ๊ด๋ฆฌํ๋ ์์ ํ ๋น ๋จ์๋ก, ์ค์ task๊ฐ ์ปจํ ์ด๋ ์์์ ์คํ๋๋ค.
๊ตฌ์ฒด์ ์ธ ์คํ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Spark ๋๋ MapReduce job์ ํด๋ฌ์คํฐ์ ์ ์ถํ๋ค. ํด๋ผ์ด์ธํธ๋ ResourceManager์๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ์์ฒญํ๋ค.
- ์์ฒญ์ ๋ฐ์ ResourceManager๋ ApplicationMaster ํ๋ก์ธ์ค๋ฅผ ์ปจํ ์ด๋ ์์์ ์์์ํจ๋ค.
- ApplicationMaster๋ ๊ด๋ฆฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ์ฌํญ์ ํ์ ํ ํ ResourceManager์๊ฒ ํ์ํ ์์์ ์ง์ ์์ฒญํ๋ค.
- ResourceManager๋ ์์ฒญ๋ฐ์ ์ปจํ ์ด๋๋ฅผ ์ฌ๋ฌ NodeManger์๊ฒ ํ ๋นํ๋ค. ApplicationMaster์๊ฒ ์์ฒญํ ์ปจํ ์ด๋๋ฅผ ์ด๋ ๋ ธ๋์์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ค.
- ์ปจํ ์ด๋ ์์น ์ ๋ณด๋ฅผ ๋ฐ์ ApplicationMaster๋ NodeManager์ ์ง์ ํต์ ํ์ฌ ์ปจํ ์ด๋์ ์ค์ task๋ฅผ ์คํํ๋๋ก ์ง์ํ๋ค.
- ๋ชจ๋ task๊ฐ ์๋ฃ๋๋ฉด ResourceManager์๊ฒ ๋ฑ๋ก์ ํด์ ํ๊ณ , ์์์ ํด๋ฌ์คํฐ์ ๋ฐ๋ฉํ๋ค.
PySpark ์ํคํ ์ฒ
PySpark
์ ํ๋ฆฌ์ผ์ด์
์ ํ์ด์ฌ๊ณผ ์๋ฐ๊ฐ ์ ๊ธฐ์ ์ผ๋ก ๊ฒฐํฉํ์ฌ ๋์ํ๋ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌ์กฐ์ด๋ค. ์์
์ง์๋ ํ์ด์ฌ, ์คํ์ JVM์์ ์ด๋ฃจ์ด์ง๋ค. ์ด๋ค์ ์ง์ ์ํตํ ์ ์๋๋ฐ, Py4J
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ ์ฌ์ด ๋ค๋ฆฌ ์ญํ ์ ํ๋ค.
๊ตฌ์ฒด์ ์ธ ์คํ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
- PySpark ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฉด ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ ํ๋ก์ธ์ค๊ฐ ์์๋๊ณ ,
SparkSession
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. - ์ดํ ํ์ด์ฌ ๋๋ผ์ด๋ฒ๋ ๋ด๋ถ์ ์ผ๋ก JVM์ ์คํํ๊ณ Py4J ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด JVM๊ณผ ์์ผ ํต์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ค.
- ์ดํ ์์ ์ ์ด์ ๊ณผ ๊ฐ๋ค.
์์ฑ๋ ํ์คํฌ๋ฅผ executor์ ์ ๋ฌํ์ฌ ์คํ์ ์ง์ํ ๋, ์ฐ์ฐ์ ์ข ๋ฅ์ ๋ฐ๋ผ ์คํ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๋ค.
select
, filter
, groupBy
์ ๊ฐ์ด ๋ฐ์ดํฐํ๋ ์์ ์ต์ ํ๋ ๋ด์ฅ ํจ์๋ค์ ์ ๋ถ executor JVM์์ ์ค์นผ๋ผ ์ฝ๋๋ก ์คํ๋๋ค. ๋ฐ๋ผ์ ํ์ด์ฌ๊ณผ JVM ๊ฐ ๋ฐ์ดํฐ ์ด๋์ด ์์ด ๋น ๋ฅด๊ณ ํจ์จ์ ์ด๋ค.
์ฌ์ฉ์ ์ ์ ํจ์(UDF
)๋ RDD์ map
์ฐ์ฐ์ฒ๋ผ ํ์ด์ฌ ์์ปค๊ฐ ํ์ํ ๊ฒฝ์ฐ JVM์ ๋ณ๋์ ํ์ด์ฌ ์์ปค ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค. executor JVM์ ์ฒ๋ฆฌํ ๋ฐ์ดํฐ ํํฐ์
์ ์ง๋ ฌํํ ํ ์์ผ์ ํตํด ํ์ด์ฌ ์์ปค๋ก ์ ์กํ์ฌ ์ฐ์ฐ์ ์ฒ๋ฆฌํ ํ, ๋ค์ ์ง๋ ฌํํ์ฌ JVM์ผ๋ก ๋๋ ค๋ณด๋ธ๋ค.
๐ ๊ตฌ์ฑ ์์
Spark๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ค์ด ์ธต์ ์ด๋ฃจ๊ณ ์๋ ํตํฉ ๋ถ์ ์์ง์ด๋ค. ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ Spark Core
๋ผ๋ ํต์ฌ ์์ง ์์์ ๋์ํ๋ค. Spark Core
๋ ๊ธฐ๋ณธ์ ์ธ ์
์ถ๋ ฅ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ฅ์ ๋ณต๊ตฌ์ ๊ฐ์ด ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์ํ ์ ์์ค ๊ธฐ๋ฅ์ ๋ด๋นํ๋ฉฐ, Spark์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋ชจ๋ธ์ธ RDD(Resilient Distributed Dataset)
API๋ฅผ ์ ๊ณตํ๋ค.
Spark Core
์์์ ๋์ํ๋ ๋ค ๊ฐ์ง ๊ณ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์๋ณด์.
Spark SQL
์ (๋ฐ)์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ์ปดํฌ๋ํธ์ด๋ฉฐ, SQL ์ฟผ๋ฆฌ ๋๋DataFrame
์ ํตํด ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋๋ก ํ๋ค. ์์ฑ๋ SQL ์ฟผ๋ฆฌ ๋๋ DataFrame์Catalyst Optimizer
๋ผ๋ ์ฟผ๋ฆฌ ์ต์ ํ ์์ง์ ํตํด ํจ์จ์ ์ธ RDD ์ฐ์ฐ plan์ผ๋ก ๋ณํํ ํ ์ฒ๋ฆฌํ๋ค.
Spark์ DataFrame์ RDD์ ์คํค๋ง๋ฅผ ๋ถ์ฌํ ๊ฒ์ด๋ค.
Spark Streaming
์Kafka
๋ฑ์ผ๋ก๋ถํฐ ์ค์๊ฐ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ปดํฌ๋ํธ์ด๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์งง์ ์๊ฐ ๋จ์์ ๋ง์ดํฌ๋ก ๋ฐฐ์น๋ก ๋๋ ํ ์ฒ๋ฆฌํ๋ค.MLlib
์ ๋น ๋ฐ์ดํฐ๋ฅผ ์ํ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๋ ฌ๋ก ์คํ๋๋๋ก ์ค๊ณ๋์๋ค.GraphX
๋ ๊ทธ๋ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ์ปดํฌ๋ํธ๋กPageRank
,Connected Components
์ ๊ฐ์ ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ์คํํ ์ ์๋ API๋ฅผ ์ ๊ณตํ๋ค.
๐ RDD์ ํน์ง
RDD(Resilient Distributed Dataset)
์ ์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐ๋์ด ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋ ์ ์๋ ๋ถ๋ณ ๋ฐ์ดํฐ ์์์ ์ปฌ๋ ์
์ด๋ค. ๋ถ๋ณ์ฑ์ด RDD์ ๊ฐ์ฅ ์ค์ํ ํน์ง ์ค ํ๋์ธ๋ฐ, ๊ธฐ์กด RDD๋ฅผ ํตํด ์๋ก์ด RDD๋ฅผ ์์ฑํ๊ธฐ ์ํด map
์ด๋ filter
์ ๊ฐ์ ์ฐ์ฐ์ ์ฌ์ฉํด์ผ ํ๋ค.
RDD๋ ํ๋์ ๊ฑฐ๋ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๊ฐ ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ ์์ ํํฐ์ ์ผ๋ก ๋๋์ด ํด๋ฌ์คํฐ์ ์ฌ๋ฌ ์์ปค ๋ ธ๋์ ๋ถ์ฐ ์ ์ฅ๋๋ค. Spark๋ ๊ฐ๊ฐ์ ํํฐ์ ์ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ์ ์ผ๋ก ๋ค๋ฃฌ๋ค.
Spark๋ RDD๊ฐ ์ด๋ค ๊ณผ์ ์ ํตํด ์์ฑ๋์๋์ง์ ๋ํ ์ ๋ณด(lineage)๋ฅผ ๊ธฐ์ตํ๋ค. ํน์ ์์ปค ๋ ธ๋๊ฐ ๋ค์ด๋์ด ์ผ๋ถ ํํฐ์ ์ด ์ ์ค๋๋ค๋ฉด, ๊ธฐ์ตํ ์ ๋ณด๋ฅผ ํตํด ์ฌ๋ผ์ง ํํฐ์ ์ ๊ณ์ฐํ์ฌ ๋ณต๊ตฌํ๋ค.
Spark๋ transformation, action ๋ ๊ฐ์ง ์ฐ์ฐ์ ๊ฐ์ง๊ณ ์๋๋ฐ, ๋ณํ ์ฐ์ฐ์ ํธ์ถ๋๋ ์ฆ์ ์คํ๋๋ ๊ฒ์ด ์๋๋ผ, ์ก์
์ฐ์ฐ์ด ํธ์ถ๋๋ฉด ์ ์๋ ๋ชจ๋ ๋ณํ ์ฐ์ฐ์ด ์ค์ ๋ก ์ํ๋๋ค. ์ด๋ฅผ lazy evaluation
์ด๋ผ๊ณ ํ๋ค.
๐ pyspark์ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์๋
1
sc = pyspark.SparkContext('local[*]')
SparkContext
๋ฉ์๋์ master
ํ๋ผ๋ฏธํฐ๋ Spark ์์
์ ์ด๋์ ์คํํ ์ง ์ง์ ํ๋ ํด๋ฌ์คํฐ URL์ด๋ค. local[*]
๋ก ์ค์ ํ๋ฉด, ํด๋ฌ์คํฐ๊ฐ ์๋ ๋ก์ปฌ ๋จธ์ ์์ Spark๋ฅผ ์คํํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ๋๊ดํธ ์์๋ ์ฌ์ฉํ ์ฝ์ด์ ์๋ฅผ ์
๋ ฅํ๋ฉฐ, asterisk๋ฅผ ์
๋ ฅํ๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ CPU ์ฝ์ด๋ฅผ ์ต๋ํ ํ์ฉํ๋ค.
SparkContext
๋ ์ฑ๊ธํด ํจํด์ผ๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ํ๋์ Spark ์ ํ๋ฆฌ์ผ์ด์
๋ด์๋ ์ค์ง ํ๋์ SparkContext
๋ง ์กด์ฌํ ์ ์๋ค. ๋ฐ๋ผ์ ์์ฑ๋ค sc
๋ฅผ ๊ณ์ํด์ ์ฌํ์ฉํ ์ ์๋ค.
์ด๋ฏธ SparkContext
๊ฐ ์คํ ์ค์ธ ์ํ์์ SparkContext
๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ฏธ ์์ฑ๋ context๋ฅผ ์์ ํ๊ฒ ๊ฐ์ ธ์ค๊ธฐ ์ํด getOrCreate
๋ฉ์๋๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค.
1
2
rdd = sc.parallelize(range(1000))
rdd.takeSample(False, 5)
parallelize
๋ฉ์๋๋ ๋ฆฌ์คํธ๋ ํํ๊ฐ์ ํ์ด์ฌ ์ปฌ๋ ์
์ RDD๋ก ๋ณํํ๋ค. parallelize(range(1000))
๋ 0๋ถํฐ 999๊น์ง์ ์ซ์๊ฐ ์๋ RDD๋ฅผ ์์ฑํ๊ณ ์ด๋ค์ ์ฌ๋ฌ ํํฐ์
์ ๋๋๋ค. ๋ ๋ฒ์งธ ์ธ์๋ก ํํฐ์
์ ๊ฐ์์ธ numSlices
๋ฅผ ๋ฐ์ ์ ์๋ค.
takeSample
๋ฉ์๋๋ RDD์์ ๋ฌด์์๋ก ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ ๊ฐ์ ธ์ค๋ action ์ฐ์ฐ์ด๋ค. ์ฒซ ๋ฒ์งธ ์ธ์์ธ withReplacement
๋ ๋ณต์ ์ถ์ถ ์ฌ๋ถ์ด๋ฉฐ, ๋ ๋ฒ์งธ ์ธ์ง์ num
์ ์ถ์ถํ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์ง์ ํ๋ค.
1
2
3
4
from operator import add
rdd = sc.parallelize([("a", 2), ("b", 3), ("a", 3)])
sorted(rdd.reduceByKey(add).collect())
reduceByKey(add)
๋ RDD์ ๊ฐ ํค์ ๋ํด ๊ฐ์ ๋ํ๋ ์์
์ ์ํํ๋ค. ์
ํ๋ง ์ ๊ฐ ์์ปค ๋
ธ๋๋ ์์ ์ ํํฐ์
์์ ๋จผ์ ์ง๊ณ ์ฐ์ฐ์ ์ํํ๋ค. ์ด๋ ๊ฒ ๋ถ๋ถ์ ์ผ๋ก ์ง๊ณ๋ ๊ฒฐ๊ณผ๋ค์ ๋์ผํ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์
ํ๋งํ๋ค. ์ด๋ฅผ ํตํด ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ต์ํํ ์ ์๋ค.
collect
๋ ๋ถ์ฐ๋ RDD์ ๋ชจ๋ ์์๋ฅผ ์์งํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ฐ์ ธ์ค๋ action ์ฐ์ฐ์ด๋ค.
๐ ์ฐธ๊ณ
https://wjrmffldrhrl.github.io/spark-1/