Spark集群搭建簡配+它到底有多快?【單挑純C/CPP/HADOOP】


最近耳聞Spark風生水起,這兩天利用休息時間研究了一下,果然還是給人不少驚喜。可惜,筆者不善JAVA,只有PYTHON和SCALA接口。花了不少時間從零開始認識PYTHON和SCALA,不少時間答了VIM的IDE,總算走入正途。下面將一些SPARK集群搭建心得簡單寫一下。期間也零星碰到不少問題。

//spark
1,去mirror站點下138M大小的編譯好的包,去下SCALA 2.9.X,HADOOP該啟動的啟動

2,配置各種$HOME和$PATH
配置$SPARK_HOME/conf/spark-env.sh中的javahome,scalehome,sparkhome
配置slaves文件加入主機名
配置.bash_profile javahome,scalehome,sparkhome 和path

3,把1主和2備用SCP同步一下
scp scala root@192.168.137.104:/root/soft
scp spark root@192.168.137.104:/root
主:start-all.sh
jps多了一個master,jps多了一個worker
http://cent3:8080/
http://cent4:8081/
http://cent2:8081/

4,跑自帶實例
./run org.apache.spark.examples.SparkPi local
./run-example org.apache.spark.examples.SparkPi spark://cent3:7077
./run-example org.apache.spark.examples.SparkLR spark://cent3:7077
./run-example org.apache.spark.examples.SparkKMeans spark://cent3:7077 ./kmeans_data.txt 2 1

5,跑spark-shell 【SBT理解不能。。-_-,好復雜】
MASTER=spark://cent3:7077 ./spark-shell
scala> System.setProperty("spark.executor.memory", "512") #調優MEM參數
scala> System.setProperty("spark.cores.max", "5") #調優CPU參數
scala> val file = sc.textFile("hdfs://cent3:9000/user/root/mandela.txt")
scala> val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)
scala> count.collect()
res0: Array[(java.lang.String, Int)] = Array((peacefully,2), ("",15), (domination,,1), (African,3), (Peace,1), (handed,1), (awarded,1), (era,,1), (cut,1), (example,1), (my,1), (probed,1), (as,2), (country's,3), (rural,1), (his,9), (voluntary,1), (when,3), (last,1), (elections,1), (its,2), (who,1), (appearance,1), (teeth,1), (neighborhood,1), (three,1), (new,1), (jail,1), (president,3), (Charged,1), (died,1), (prisoner.,1), (mission,1), (years,2), (Mandela,6), (Madiba,,1), (myself,1), (1999.,1), (disease,1), (President,3), (after,1), (grip,1), (ovation,1), (office.,1), (from,8), (prolonged,1), (Nobel,1), (sides,1), (died:,1), (other,1), (personal,1), (wounds.,1), (one,1), (Africa,2), (obscurity,1), (As,1), (forging,1), (son,1), (this,1), (president,,1), (has,2), (Mandela,,3), (apartheid,...

6,跑pyspark實例
cd /root/spark/python
[ALONE+LOCAL] pyspark examples/wordcount.py local[2] mandela.txt
[ALONE+HDFS] pyspark examples/wordcount.py local[2] hdfs://cent3:9000/user/root/mandela.txt
[CLUSTER+LOCAL] pyspark examples/wordcount.py spark://cent3:7077 mandela.txt 前提是所有Master和Worker主機上都有
[CLUSTER+HDFS pyspark examples/wordcount.py spark://cent3:7077 hdfs://cent3:9000/user/root/mandela.txt

 

好,至此基本上可以隨便玩了,github上有官網python例子,省了不少事兒。下面開始他的真身驗明,交手C/CPP/HADOOP

環境介紹:

1,某想 E49 Inter Core i5-3320M CPU@2.6GHz / 2048MB / 128G 某星 SSD

2,VituralBox 三台虛擬機cent2,cent3,cent4。其中cent3是老大

虛擬機配置: 1 core /  2048MB / 10G VMDX(SPLIT=2G)/ CENTOS 6,不啟用過量分配。

3,單挑對象簡介

  • 純C:以stdio的fgets作為標准輸入,sscanf拆分,在一套循環內完成word count。
  • CPP:以std::cin作為標准輸入,未加速,自動空格拆分,用pipe模擬MR,一個讀,一個匯總。
  • HADOOP:以CPP為模板做Streaming,HDFS做介質。
  • SPARK:本地LOCAL用單線程、雙線程共同測試(雖然CPU是1core)
  • SPARK:AMP最推薦的運載方式,不多言。

4,關聯文件,從網上DOWN篇E文小說,復制成100M/500M/1024M,做WORDCOUNT。

5,所有平台做初始配置,不調優。

最終測得結果如下:

 

結論:

  1. 在單機版上spark與純C不分伯仲,但也領先了cpp不少。
  2. 在分布式上,的確比hadoop快N倍,真心強,這還是在split 32MB的情況下。
  3. 此次純c的mmap和OS RawDevice未參與,即便參與估計也就再多給1~3秒,個人感覺spark應該有用到這塊一口悶的關鍵技術。
  4. 此次僅僅是wordcount,謠傳k-means效果恐怖,有空再測試一把。
  5. 由於1核VM,基本上跑起來CPU就是100%。不過SPARK有個特點就是SYS%用的少,這應該就是純MEM計算的特征。

心得:

  1. 集群搭建不難,難在lamada編程,真心考驗腦力,有時感覺比ML還復雜,多少理解不能,但還得去學,應該蠻有意思的。
  2. python的同學別高興太早,關鍵代碼還是要lamada編程。
  3. java和scala同學的福音,自帶N多MLLIB。
  4. 中文版調優文檔較少,國外論壇和WIKI較少,還是得自學。希望國內有人開個BBS組織一下。^_^

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM