Spark2.1集群安裝(standalone模式)


機器部署

  准備三台Linux服務器,安裝好JDK1.7

下載Spark安裝包

  上傳spark-2.1.0-bin-hadoop2.6.tgz安裝包到Linux(intsmaze-131)上

  解壓安裝包到指定位置tar -zxvf spark-2.1.0-bin-hadoop2.6.tgz -C /home/hadoop/app/spark2.0/

原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/6569036.html

微信:intsmaze

配置Spark

  進入到Spark安裝目錄

  cd /spark-2.1.0-bin-hadoop2.6/conf

  mv spark-env.sh.template spark-env.sh

  vi spark-env.sh

  在該配置文件中添加如下配置  

export JAVA_HOME=/home/hadoop/app/jdk1.7.0_65
export SPARK_MASTER_IP=intsmaze-131(指定standalone模式中主節點master是哪一台spark節點)
export SPARK_MASTER_PORT=7077 

  mv slaves.template slaves

  vi slaves

  在該文件中添加子節點所在的位置(Worker節點)

intsmaze-131
intsmaze-132
intsmaze-134

  將配置好的Spark拷貝到其他節點上(注意節點的路徑必須和master一樣,否則master啟動集群回去從節點中對應目錄中去啟動work,不一致會報No such file or directory

scp -r spark-2.1.0-bin-hadoop2.6/ intsmaze-132:/home/hadoop/app/spark2.0/
scp -r spark-2.1.0-bin-hadoop2.6/ intsmaze-134:/home/hadoop/app/spark2.0/

  Spark集群配置完畢,目前是1個Master,3個Work,在intsmaze-131(master節點)上啟動Spark集群

/home/hadoop/app/spark2.0/spark-2.1.0-bin-hadoop2.6/sbin/start-all.sh(spark集群不需要啟動hadoop集群等,與hadoop集群無關。如果配置為spark on yarn上,那么必須啟動spark和yarn集群而不需要啟動hadoop)

  啟動后執行jps命令,主節點上有Master進程和Work進程,其他子節點上有Work進程,登錄Spark管理界面查看集群狀態(主節點):http://intsmaze-131:8080/

執行第一個spark程序

/home/hadoop/app/spark2.0/spark-2.1.0-bin-hadoop2.6/bin/spark-submit \
 --class org.apache.spark.examples.SparkPi \
 --master spark://intsmaze-131:7077 \
 --executor-memory 1G \
 --total-executor-cores 2 /home/hadoop/app/spark2.0/spark-2.1.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.1.0.jar \
 100

 該算法是利用蒙特·卡羅算法求PI。

啟動Spark Shell

  spark-shell是Spark自帶的交互式Shell程序,方便用戶進行交互式編程,用戶可以在該命令行下用scala編寫spark程序。

 /home/hadoop/app/spark2.0/spark-2.1.0-bin-hadoop2.6/bin/spark-shell \
 --master spark://intsmaze-131:7077 \
--executor-memory 2g \
--total-executor-cores 2

參數說明:

--master spark://intsmaze-131:7077 指定Master的地址

--executor-memory 2g 指定每個worker可用內存為2G,現有集群該任務將無法啟動,應該修改為512m。

--total-executor-cores 2 指定整個任務使用的cup核數為2個。

  注意:如果給該任務分配的資源無法達到指定的,將無法成功啟動job。比如服務器節點可以內存為為1G,你設置每個worker2G,將會無法啟動任務。askSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

  如果啟動spark shell時沒有指定master地址,但是也可以正常啟動spark shell和執行spark shell中的程序,其實是啟動了spark的local模式,該模式僅在本機啟動一個進程,沒有與集群建立聯系。Spark Shell中已經默認將SparkContext類初始化為對象sc。用戶代碼如果需要用到,則直接應用sc即可。

在spark shell中編寫WordCount程序

1.首先啟動hdfs

2.向hdfs上傳一個文件到intsmaze-131:9000/words.txt

3.在spark shell中用scala語言編寫spark程序

sc.textFile("hdfs://192.168.19.131:9000/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://192.168.19.131:9000/out")

4.使用hdfs命令查看結果

hdfs dfs -ls hdfs://intsmaze-131:9000/out/p*

說明:

sc是SparkContext對象,該對象時提交spark程序的入口
textFile(hdfs://intsmaze-131:9000/words.txt)是hdfs中讀取數據
flatMap(_.split(" "))先map在壓平
map((_,1))將單詞和1構成元組
reduceByKey(_+_)按照key進行reduce,並將value累加
saveAsTextFile("hdfs://intsmaze-131:9000/out")將結果寫入到hdfs中

配置Spark的高可用

  到此為止,Spark集群安裝完畢,但是有一個很大的問題,那就是Master節點存在單點故障,要解決此問題,就要借助zookeeper,並且啟動至少兩個Master節點來實現高可靠,配置方式比較簡單:

  Spark集群規划:intsmaze-131,intsmaze-132是Master;intsmaze-131,intsmaze-132,intsmaze-134是Worker

  安裝配置zk集群,並啟動zk集群

  停止spark所有服務,修改配置文件spark-env.sh,在該配置文件中刪掉SPARK_MASTER_IP並添加如下配置

  export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk1,zk2,zk3 -Dspark.deploy.zookeeper.dir=/spark"

  在node4上執行sbin/start-all.sh腳本,然后在node5上執行sbin/start-master.sh啟動第二個Master


免責聲明!

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



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