Spark - namgunghyeon/wiki GitHub Wiki
Spark์ ๋ฆฌ
1.Spark๋
Apach Spark๋ ๋น ๋ฅด๊ณ General Purpose Cluster Computing System์
๋๋ค. ์คํ์ ๋ฒ์ฉ ๋ถ์ฐ ํ๋ซํผ. ํ๋ก๊ณผ ๊ฐ์ด MapReduce๋ง ๋๋ฆฌ๋ ๊ฒ์ ์๋๊ณ , Storm๊ณผ ๊ฐ์ด ์คํธ๋ฆฌ๋ฐ๋ง ์ฒ๋ฆฌํ๋๊ฒ ์๋๋ผ, ๋ถ์ฐ๋ ์ฌ๋ฌ๋์ ๋
ธ๋์์ ์ฐ์ฐํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฒ์ฉ ๋ถ์ฐ ํด๋ฌ์คํฐ๋ง ํ๋ซํผ์ผ๋ก, ์์ MapRduce, ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ๋ฑ์ ๋ชจ๋์ ์ฌ๋ ค์ ์ํํ ์ ์๋ค. ํ๋ก์ด MR์์
์ ๋์คํฌ ๊ธฐ๋ฐ์ผ๋ก ์ํํ๊ธฐ ๋๋ฌธ์ ๋๋ ค์ง๋ ์ฑ๋ฅ์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ์ฎ๊ฒจ์ ๊ณ ์ํ ํ๊ณ ์ ์ถ๋ฐํ๋ค.
2.๊ตฌ์กฐ
์คํ์ Driver Program์ผ๋ก Driver Program์ ์ฌ๋ฌ๊ฐ์ ๋ณ๋ ฌ ์์ ์ผ๋ก ๋๋์ด Spark์ Worker Node์ ์๋ Executor์์ ์คํ๋๋ค.
Cluster Manager Type: Standalone, Apache Mesos, Hadoop YARN
Driver Program main ํจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ๋ก์ธ์ค, spark-sumit์ ํตํด์ ๊ตฌํํ ์ฝ๋๋ฅผ ์ ์ถ, ๊ตฌํํ ์ฝ๋์์๋ SparkContext๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , RDD๋ฅผ ์์ฑํ๋ฉฐ ์ ์ถํ application์ Task๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ค์ ์ํ ๋จ์๋ก ๋ณํ task๋ฅผ ๋ฌถ์ด Worker Node์ Executor๋ก ์ ๋ฌ์ ํ๋ค. Executor๋ ๋ฐ์ Task๋ฅผ RDD์ ์ ์ฅํ๊ณ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.(spark-sumit์ด ์์ปค ๋ ธ๋์ ์ ๋ณด๋ฅผ ์๊ณ ๋ชจ๋ ์ํฌ ๋ ธ๋์๊ฒ ์์ ์ ์ํค๋ ๊ฑด์ง?, ํด๋ฌ์คํฐ ๋งค๋์ ๋ก๋ถํฐ ์์ปค ๋ ธ๋ ์ ๋ณด๋ฅผ ๋ฐ์์ ์ ๋ฌ?)
Worker Node ํด๋ฌ์คํฐ์ ์๋ executor๋ฅผ ํฌํจํ ์ค์ ์์ ์ ํ๋ ๋ ธ๋
SparkContext Driver Program์ ์ํด์ ์์ฑ๋๊ณ , Cluster manager(Resource๋ฅผ ํ ๋นํ๋ ์ญํ)์ ์ฐ๊ฒฐ๋๋ค.
Executor computation๊ณผ data๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ํ๋ process๋ก, application๊ณผ lifecycle๊ณผ ๋์ผํ๊ฒ ์ํ๋๋ค. executor๊ฐ ์ค๋ฅ๊ฐ ๋๋ฉด ๋์ฒด executor job์ ํ ๋น ํ๋ค. Executor๋ multi threads์์ tasks๋ฅผ ์ํํ๊ณ ์ํ ๊ฒฐ๊ณผ๋ฅผ Driver Program์ผ๋ก ์ ์ก ๋ฐ tasks๋ฅผ ์ค์ผ์ฅด๋งํ๋ ์ญํ ์ ํ๋ค.
Spark Application ์คํ ๋์ ์์
1.์ฌ์ฉ์๊ฐ spark-submit์ ์ฌ์ฉํด ์์ฑํ Application์ ์คํ
2.spark-submit์ Driver Program์ ์คํํ์ฌ main() ๋ฉ์๋๋ฅผ ํธ์ถ
3.Driver์์ ์์ฑ๋ SparkContext๋ Cluster Manager๋ก ๋ถํฐ Executor ์คํ์ ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญ
4.Cluster Manager๋ Executor๋ฅผ ์คํ
5.Driver Program์ Application์ Task๋จ์๋ก ๋๋์ด Executor์๊ฒ ์ ์ก
6.Executor๋ Task๋ฅผ ์คํ
7.Executor๋ Application์ด ์ข
๋ฃ๋๋ฉด, ๊ฒฐ๊ณผ๋ฅผ Driver Program์๊ฒ ์ ๋ฌ, Cluster Manager์๊ฒ ๋ฆฌ์๋ฅผ ๋ฐ๋ฉ.
3.RDD(Resilient Distributed DataSet)
Resilient Distributed Datasets์ ํน์ฑ์ immutable, partitioned collections of records์ ํน์ง์ด ์๋ค.
์์ ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ Storage์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ RDD๋ก ๋ณํํ๊ฑฐ๋ RDD์์ RDD๋ก๋ง ๊ฐ๋ฅํ๋ค.
immutable์ด๊ธฐ ๋๋ฌธ์ ์์ ์ด ๋ถ๊ฐ๋ฅํด, read-only๋ก๋ง ์ฌ์ฉ๋๊ณ , ์์ฑ๋๋ ๊ณผ์ ์ ๊ธฐ๋กํด ๋์ linege๋ฅผ ํตํด์ RDD๊ฐ์ฒด๋ฅผ ๋ค์ ์์ฑํ ์ ์๋ค. ์ด๋ ๊ฒํ๋ฉด fault-tolerant์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
linegage๋ ๊ณ๋ณด๋ผ๋ ๋ป์ ๊ฐ๊ณ ์๊ณ , DAG(directed acyclic graph)๋ก ๋์์ธ ๋์ด ์๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ก๋ฉํ๊ณ , ์ผ๋ จ์ ๊ณผ์ ์ ๊ธฐ๋กํ๊ณ ์๊ณ , ์ด๋ ๊ฒ ๊ธฐ๋ก๋ ๊ณผ์ ์ ์ถํ fault-tolerant์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ ๋ด๊ฐ ์์ฑํด ๋์ RDD์ ์ด์ lineage๋ฅผ ๋ณด๊ณ ์์ฑํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ๋ณต๊ตฌ ๊ฐ๋ฅํ๋ค.
RDD๋ ์ฌ๋ฌ ๋ถ์ฐ ๋ ธ๋์ ๊ฑธ์ณ์ ์ ์ฅ๋๋ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ์งํฉ์ผ๋ก ๊ฐ๊ฐ์ RDD๋ ์ฌ๋ฌ๊ฐ์ ํํฐ์ ์ผ๋ก ๋ถ๋ฆฌ๊ฐ ๋๋ค. RDD๋ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํด, ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋ก์ด ๋ฐ์ดํฐ ์ ์ ์์ฑํด์ผ ํ๋ค. ๋ ๊ฐ์ง ์คํผ๋ ์ด์ ๋ง ์ง์ํ๋ค.
Transformation : ๊ธฐ์กด์ RDD ๋ฐ์ดํ๋ฅผ ๋ณ๊ฒฝํ์ฌ ์๋ก์ด RDD ๋ฐ์ดํ๋ฅผ ์์ฑํด๋ด๋ ๊ฒ. filter์ ๊ฐ์ ํน์ ํ ๋ฐ์ดํ๋ง ๋ฝ์ ๋ด๊ฑฐ๋ map ํจ์ ์ฒ๋ผ, ๋ฐ์ดํ๋ฅผ ๋ถ์ฐ ๋ฐฐ์น ํ๋ ๊ฒ ๋ฑ์ ๋ค ์ ์๋ค.
Action : RDD ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๊ณ์ฐํด์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํด ๋ด๋๊ฒ์ผ๋ก Count()์ ๊ฐ์ Operation๋ค์ ๋ค ์ ์๋ค. RDD์ ๋ฐ์ดํ ๋ก๋ฉ ๋ฐฉ์์ Lazy ๋ก๋ฉ ์ปจ์ ์ ์ฌ์ฉํ๋๋ฐ, ์๋ฅผ ๋ค์ด sc.textFile(โํ์ผ')๋ก ํ์ผ์ ๋ก๋ฉํ๋๋ผ๋ ์ค์ ๋ก ๋ก๋ฉ์ด ๋์ง ์๋๋ค. ํ์ผ์ด ๋ก๋ฉ๋์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ ์์ ์ action์ ์ด์ฉํด์ ๊ฐ์ ํ ๋น์๋ง ์ฌ๋ผ๊ฐ๋ค. RDD๋ฅผ action์ ๋ง๋๊ธฐ ์ ๊น์ง transformation์ ์ฒ๋ฆฌํ์ง ์๊ณ RDD๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋ณด๋ค๋ reference๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Data Partitioning ๋ถ์ฐ ํ๋ก๊ทธ๋จ์์ ๋์ ๋น์ฉ์ด ๋งค์ฐ์ปค ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ค์ด๋ ๊ฒ์ด ์ค์. ํํฐ์ ๋์ ๋คํธ์ํฌ ๋ถํ๋ฅผ ํจ์จ์ ์ผ๋ก ์ค์ด๋ ๋ฐฉ๋ฒ ์ด๋ค ํค์ ๋ชจ์๋ค์ ์์์ ๋ ธ๋์ ํจ๊ป ๋ชจ์ฌ ์๋ ๊ฒ์ ๋ณด์ฅ ํค ์ค์ฌ์ ์ฐ์ฐ์์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ๋ฒ ์ฌ ์ฌ์ฉ๋ ๋๋ง ์๋ฏธ๊ฐ ์์
Cache Transformation๊ณผ Action์ Operation์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ . ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉํ๋ ์์ ์ ์งํ ํ์ง๋ง Action์ operation์ ์ฌ์ฉํ๊ณ ๋๋ฉด, ๋ฐ์ดํฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ ํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง๊ฒ ๋๋ค. action์ ํ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ก๋ฉํ๊ณ ๋ฐํํ๋ ์์ ์ ๋ฐ๋ณต์ ์ผ๋ก ์งํํ๊ฒ ๋๋ค. RDD๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ ์ํ์์ ์ฌํ์ฉํด์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ Persist์ ์ฌ์ฉํ๋ค. ์ด๋ฅผ ํตํด์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผ ์ํฌ ์ ์๊ณ , LRU ์๊ณ ๋ฆฌ์ฆ์ ์ํด์ ์ญ์ ๋๊ฑฐ๋ unpersist์ ํตํด์ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ํ ์ ์๋ค. cache()๋ persist() ์์ ์ ์ฅ ์ต์ ์ MEMORY_ONLY๋ก ํ ์ต์ ๊ณผ ๋์ผํ๋ค.
๋ฐ์ดํฐ ์์ด ๋ง์ ๊ฒฝ์ฐ์๋ DISK์ ์ ์ฅํ๋ ์ต์ ๋ณด๋ค๋ ์ฐจ๋ผ๋ฆฌ persistํ์ง ์๊ณ (Serialize-Deserialize์ ์ค๋ฒํค๋๊ฐ ํผ), ํ์ํ ๋๋ง๋ค ์ฌ๊ณ์ฐํ๋ ๊ฒ์ด ๋ ๋น ๋ฅผ ์ ์๋ค. lazy-execution์ ์ฅ์ ์ ๋ฆ๊ฒ ์คํ๋๋ ๋์ DAG๋ฅผ ํตํด์ transformation์ ์ฐ์ฐ์ ์ฝ์คํธ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํด ์ต์ ์ผ๋ก ๊ณ์ฐํ๋ค.
Narrow Dependency Narrow๋ ํ ๋ ธ๋์์ ์ฒ๋ฆฌ ํ ์ ์๋ ์ผ์ ๋ชจ์์
Wide Dependency Wide๋ ๋ชจ๋ ๋ ธ๋์์ ์์ ์ ๋ชจ์์ ์ฐ์ฐ์ ์ํํ๊ธฐ ๋๋ฌธ์ Network I/O๊ฐ ๋ฐ์ํ๊ณ ๋๋ฆฌ๋ค.
4.Spark On Mesos
Mesos - Master์ Spark ์ค์น
https://spark.apache.org/downloads.html
wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.7.tgz
Spark์ด ์ค์น๋ /home/nkh/spark-2.0.0-bin-hadoop2.7/conf ํด๋์์ spark-env.sh.template -> spark-env.sh๋ก ๋ณต์ฌ
๋ณต์ฌ๋ spark-env.shํ์ผ์ ์๋ ๋ ๊ฐ๋ฅผ ์ค์
Spark์์ Mesos๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก
export MESOS_NATIVE_JAVA_LIBRARY=/usr/lib/libmesos.so
Mesos Master ์๋ฒ์์ python -m SimpleHTTPServer 9914 ์คํ
Spark์ ๋ค์ด ๋ฐ์ Mesos Slave์์ ์คํ ํ ์ ์๋๋ก ์ค์
export SPARK_EXECUTOR_URI=http://130.211.188.2:9914/spark-2.0.0-bin-hadoop2.7.tgz
Spark์คํ
Client Mode
~/spark-2.0.1-bin-hadoop2.7/bin
bash pyspark --master mesos://10.128.0.2:5050 <- ๋ด๋ถ ์ฃผ์ ๋ง๊ณ ์ธ๋ถ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋๋ก ๋์ํ์ง ์์. ๋ค๋ฅธ ์ค์ ์ด ์๋์ง ํ์ธ์ด ํ์.
Spark์ด์คํ๋๋ฉด ๋ชจ๋ Mesos-Slave์ Spark์ ์คํํ ์ ์๋๋ก ์ค๋น
Spark์์
์ฒ๋ฆฌ ํํฉ
http://130.211.188.2:4040/executors/
cluster-mode ๋ง์คํฐ์์ ๋ฉ์์ค ๋์คํจ์ณ ์คํ
~/spark-2.0.1-bin-hadoop2.7/sbin
bash start-mesos-dispatcher.sh --master mesos://10.128.0.2:5050
๋์คํจ์ฒ๋ฅผ ์คํ์ํค๋ฉด ์๋์ ๊ฐ์ด spark-submit์ผ๋ก ๋ฐ์ ์ ์๋๋ก ์๋ฒ๋ฅผ ์ฐ๋ค.
Spark Command: /usr/lib/jvm/java-8-oracle/bin/java -cp starting org.apache.spark.deploy.mesos.MesosClusterDispatcher, logging to /home/mesos-master-1/spark-2.0.1-bin-hadoop2.7/logs/spark-mesos-master-1-org.apache.spark.deploy.mesos.MesosClusterDispatcher-1-mesos-master-1.out
mesos-master-1@mesos-master-1:~/spark-2.0.1-bin-hadoop2.7/sbin$ tail -f /home/mesos-master-1/spark-2.0.1-bin-hadoop2.7/logs/spark-mesos-master-1-org.apache.spark.deploy.mesos.MesosClusterDispatcher-1-mesos-master-1.out
16/10/05 08:00:29 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(mesos-master-1); groups with view permissions: Set(); users with modify permissions: Set(mesos-master-1); groups with modify permissions: Set()
16/10/05 08:00:29 INFO Utils: Successfully started service on port 8081.
16/10/05 08:00:29 INFO MesosClusterUI: Bound MesosClusterUI to 0.0.0.0, and started at http://10.0.2.15:8081
I1005 08:00:29.956048 15739 sched.cpp:226] Version: 1.0.1
I1005 08:00:29.959381 15736 sched.cpp:330] New master detected at [email protected]:5050
I1005 08:00:29.959638 15736 sched.cpp:341] No credentials provided. Attempting to register without authentication
I1005 08:00:29.960786 15736 sched.cpp:743] Framework registered with 56f0b494-020b-4ef5-99d6-cd36ed1fdccc-0003
16/10/05 08:00:29 INFO MesosClusterScheduler: Registered as framework ID 56f0b494-020b-4ef5-99d6-cd36ed1fdccc-0003
16/10/05 08:00:29 INFO Utils: Successfully started service on port 7077.
16/10/05 08:00:29 INFO MesosRestServer: Started REST server for submitting applications on port 7077
ํด๋ฌ์คํฐ ๋ชจ๋ ์คํ
๋ค๋ฅธ ์๋ฒ์์ ์คํ์ ์ค์น ํ spark-submit์ผ๋ก ํ๋ก๊ทธ๋จ ์ ์ถ
/home/nkh/spark-2.0.0-bin-hadoop2.7/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master mesos://10.128.0.2:7077 \
--deploy-mode cluster \
http://130.211.188.2:9914/cluster-test.py <- ์คํํด์ผํ ํ์ผ python -m SimpleHTTPServer 9914 ๋์์ ์ฌ์ฉ
์ ๋ด์ฉ์ GCE์์ ์คํํ๋ ๋ถ๋ถ
์๋ ๋ด์ฉ์ virtualbox์์ ์คํ
/home/mesos-master-3/spark-2.0.1-bin-hadoop2.7/bin/spark-submit \
--class org.apache.spark.examples.SparkPi --master mesos://192.168.56.101:7077 --deploy-mode cluster \ http://192.168.56.106:9914/test.py
https://github.com/namkunghyeon/python_spark
์ค์
--master mesos://192.168.56.101:7077 ์ปค๋ฅ์
์ด ์๋๋ ๊ฒฝ์ฐ netstat -pln๋ก 7077ํฌํธ๊ฐ ์ ์์ ์ผ๋ก ์์ดํผ์ ๋ฐ์ธ๋ฉ๋์ด ์๋์ง ํ์ธ
tcp6 0 0 192.168.56.101:7077 :::* LISTEN 15852/java
์๋ ์ฒ๋ผ ๋์ด ์๋ค๋ฉด
tcp6 0 0 127.0.1.1:7077 :::* LISTEN 15852/java
vi /etc/hosts์์
127.0.1.1 mesos-master-1 ํด๋น ๋ถ๋ถ ์ญ์
์ ์์ ์ด๋ผ๋ฉด ์๋ ์ฒ๋ผ ๊ธฐ๋ก์ด ๋์ด ์์ด์ผํจ.
192.168.56.101 mesos-master-1
192.168.56.102 mesos-master-2
192.168.56.103 mesos-master-3
์ถ์ฒ : http://ourcstory.tistory.com/124 https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-mesos.html https://ogirardot.wordpress.com/2015/05/29/rdds-are-the-new-bytecode-of-apache-spark/ https://vanwilgenburg.wordpress.com/2015/05/10/how-to-run-a-spark-cluster-on-mesos-on-your-mac/ http://bcho.tistory.com/1024