大數(shù)據(jù)利器:Spark的單機(jī)部署與測(cè)試筆記
一、硬件環(huán)境
操作系統(tǒng): ubuntu-13.04-desktop-i386
JAVA: jdk1.7
SSH配置: openssh-server
二、資源準(zhǔn)備
什么是Spark?以下為Spark官網(wǎng)的一句話簡(jiǎn)介:
Apache Spark™ is a fast and general engine for large-scale data processing.
Spark包資源下載地址:點(diǎn)擊進(jìn)入下載頁(yè)面
我安裝的版本是:0.9.1版本,源碼包為:spark-0.9.1.tgz
Spark有以下四種運(yùn)行模式:
-
local:本地單進(jìn)程模式,用于本地開(kāi)發(fā)測(cè)試Spark代碼
-
standalone:分布式集群模式,Master-Worker架構(gòu),Master負(fù)責(zé)調(diào)度,Worker負(fù)責(zé)具體Task的執(zhí)行
-
on yarn/mesos:運(yùn)行在yarn/mesos等資源管理框架之上,yarn/mesos提供資源管理,spark提供計(jì)算調(diào)度,并可與其他計(jì)算框架(如MapReduce/MPI/Storm)共同運(yùn)行在同一個(gè)集群之上
-
on cloud(EC2):運(yùn)行在AWS的EC2之上
Spark支持local模式和cluster模式,local不需要安裝mesos;如果需要將spark運(yùn)行在cluster上,需要安裝mesos。
三、安裝部署
先把Scala和git裝好,因?yàn)橹蟮膕bt/sbt執(zhí)行的是使用spark自帶的sbt編譯/打包。
sudo apt-get update
sudo apt-get install scala
我們需要做的其實(shí)就兩步,解壓縮與編譯。
$tar -zxvf spark-0.9.1.tgz -C /home/hadoop/software/spark
$cd /home/hadoop/software/spark/spark-0.9.1
$sbt/sbt assembly
這一段時(shí)間等的會(huì)比較長(zhǎng),耐心些。
四、檢驗(yàn)測(cè)試
Spark有兩種運(yùn)行模式。
4.1 Spark-shell
此模式用于interactive programming,具體使用方法如下(先進(jìn)入bin文件夾)。
$ ./spark-shell
出現(xiàn)如下信息:
14/05/10 14:18:23 INFO HttpServer: Starting HTTP Server
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 0.9.1
/_/
Using Scala version 2.10.3 (Java HotSpot(TM) Server VM, Java 1.7.0_51)
Type in expressions to have them evaluated.
Type :help for more information.
14/05/10 14:18:34 INFO Slf4jLogger: Slf4jLogger started
14/05/10 14:18:34 INFO Remoting: Starting remoting
14/05/10 14:18:34 INFO Remoting: Remoting started;
……
Created spark context..
Spark context available as sc.
然后輸入如下信息:
scala> val days = List("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
days: List[java.lang.String] = List(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
scala> val daysRDD = sc.parallelize(days)
daysRDD: spark.RDD[java.lang.String] = ParallelCollectionRDD[0] at parallelize at <console>:14
scala> daysRDD.count()
在經(jīng)過(guò)一系列計(jì)算后,顯示如下信息:
res0: Long = 7
4.2 Run腳本
用于運(yùn)行已經(jīng)生成的jar包中的代碼,如Spark自帶的example中的SparkPi.
$./bin/run-example org.apache.spark.examples.SparkPi local[3]
local代表本地,[3]表示3個(gè)線程跑。
計(jì)算結(jié)果如下:
Pi is roughly 3.1444
五、學(xué)習(xí)建議
在配置過(guò)程中看到他人給的一些建議,于是搜集起來(lái)供以后學(xué)習(xí)參考。
-
如何寫(xiě)一些spark application?
多看一些spark例子,如:http://www.spark-project.org/examples.html,https://github.com/mesos/spark/tree/master/examples
-
遇到問(wèn)題怎么辦?
首先是google遇到的問(wèn)題,如果還是解決不了就可以到spark google group去向作者提問(wèn)題:http://groups.google.com/group/spark-users?hl=en
-
想深入理解spark怎么辦?
閱讀spark的理論paper:http://www.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-82.pdf
閱讀spark源代碼:https://github.com/mesos/spark