Spark目前支持多種分佈式部署方式:1、Standalone Deploy Mode;二Amazon EC2、;3、Apache Mesos;4、Hadoop YARN。第一種方式是單獨部署,不須要有依賴的資源管理器,其它三種都須要將spark部署到對應的資源管理器上。html
除了部署的多種方式以外,較新版本的Spark支持多種hadoop平臺,好比從0.8.1版本開始分別支持Hadoop 1 (HDP1, CDH3)、CDH四、Hadoop 2 (HDP2, CDH5)。目前Cloudera公司的CDH5在用CM安裝時,可直接選擇Spark服務進行安裝。java
目前Spark最新版本是1.0.0。linux
咱們就以1.0.0版本,來看看如何實現Spark分佈式集羣的安裝:web
1、Spark 1.0.0須要JDK1.6或更高版本,咱們這裏採用jdk 1.6.0_31;shell
2、Spark 1.0.0須要Scala 2.10或更高版本,咱們這裏採用scala 2.10.3;apache
3、從https://spark.apache.org/downloads.html 下載合適的bin包來安裝,咱們這裏選擇CDH4版本的spark-1.0.0-bin-cdh4.tgz;下載到tongjihadoop165上;分佈式
4、解壓bin包:tar –zxf spark-1.0.0-bin-cdh4.tgz;oop
5、重命名:mv spark-1.0.0-bin-cdh4 spark-1.0.0-cdh4;ui
6、cd spark-1.0.0-cdh4 ;spa
mv ./conf/spark-env.sh.template ./conf/spark-env.sh
7、vi ./conf/spark-env.sh 添加如下內容:
export SCALA_HOME=/usr/lib/scala-2.10.3
export JAVA_HOME=/usr/java/jdk1.6.0_31
export SPARK_MASTER_IP=10.32.21.165
export SPARK_WORKER_INSTANCES=3
export SPARK_MASTER_PORT=8070
export SPARK_MASTER_WEBUI_PORT=8090
export SPARK_WORKER_PORT=8092
export SPARK_WORKER_MEMORY=5000m
SPARK_MASTER_IP這個指的是master的IP地址;SPARK_MASTER_PORT這個是master端口;SPARK_MASTER_WEBUI_PORT這個是查看集羣運行狀況的WEB UI的端口號;SPARK_WORKER_PORT這是各個worker的端口 號;SPARK_WORKER_MEMORY這個配置每一個worker的運行內存。
8、vi ./conf/ slaves 每行一個worker的主機名,內容以下:
10.32.21.165
10.32.21.166
10.32.21.167
9、(可選) 設置 SPARK_HOME 環境變量,並將 SPARK_HOME/bin 加入 PATH:
vi /etc/profile ,添加內容以下:
export SPARK_HOME=/usr/lib/spark-1.0.0-cdh4
export PATH=$SPARK_HOME/bin:$PATH
10、將tongjihadoop165上的spark複製到tongjihadoop166和tongjihadoop167上:
sudo scp -r hadoop@10.32.21.165:/usr/lib/spark-1.0.0-cdh4 /usr/lib
安裝scala時也能夠這樣遠程拷貝文件並修改環境變量文件/etc/profile,改完以後別忘了source。
11、執行 ./sbin/start-all.sh 啓動spark集羣;
若是start-all方式沒法正常啓動相關的進程,能夠在$SPARK_HOME/logs目錄下查看相關的錯誤信息。其實,你還能夠像Hadoop同樣單獨啓動相關的進程,在master節點上運行下面的命令:
在Master上執行:./sbin/start-master.sh
在Worker上執行:./sbin/start-slave.sh 3 spark://10.32.21.165:8070 --webui-port 8090
12、檢查進程是否啓動,執行jps命令,能夠看到Worker進程或者Master進程。而後能夠在WEB UI上查看http://tongjihadoop165:8090/能夠看到全部的work 節點,以及他們的 CPU 個數和內存等信息。
十3、Local模式運行demo
好比:./bin/run-example SparkLR 2 local 或者 ./bin/run-example SparkPi 2 local
這兩個例子前者是計算線性迴歸,迭代計算;後者是計算圓周率
十4、啓動交互式模式:./bin/spark-shell --master spark://10.32.21.165:8070 , 若是在conf/spark-env.sh中配置了MASTER(加上一句export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}),就能夠直接用 ./bin/spark-shell啓動了。
spark-shell做爲應用程序,是將提交做業給spark集羣,而後spark集羣分配到具體的worker來處理,worker在處理做業的時候會讀取本地文件。
這個shell是修改了的scala shell,打開一個這樣的shell會在WEB UI中能夠看到一個正在運行的Application,以下圖:
最下面的是運行完成的Applications,workers列表是集羣的節點列表。
咱們能夠在這個打開的shell下對HDFS上的數據作一些計算,在shell中依次輸入:
A、val file = sc.textFile("hdfs://10.32.21.165:8020/1639.sta") #這是加載HDFS中的文件
B、file.map(_.size).reduce(_+_) #這是計算文件中的字符個數
運行狀況,以下圖:
最終結果能夠看出有346658513個字符。速度很是快用時不到3s。
或者B階段執行val count = file.flatMap(line => line.split("\t")).map(word => (word, 1)).reduceByKey(_+_) 和count.saveAsTextFile("hdfs://10.32.21.165:8020/spark") 將計算結果存儲到HDFS上的/spark目錄下。
也能夠執行./bin/spark-shell --master local[2] ,啓動一個本地shell ,[2]能夠指定線程數,默認是1。
執行exit能夠退出shell。
十5、執行 ./sbin/stop-all.sh 中止spark集羣
也能夠經過單獨的進程的stop腳本終止
注意:三臺機器spark所在目錄必須一致,由於master會登錄到worker上執行命令,master認爲worker的spark路徑與本身同樣。
參考:
一、 http://www.linuxidc.com/Linux/2014-06/103210p2.htm
二、 http://spark.apache.org/docs/latest/
三、 http://blog.csdn.net/myrainblues/article/details/22084445