Spark叢集搭建
local本地模式
下載下傳安裝包解壓即可使用,測試(2.2版本)
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[1] ./examples/jars/spark-examples_2.11-2.2.0.jar 100
local[1]:1代表線程數
100:spark類中需要的一個參數,越大計算的越準
叢集搭建過程中,基本上是哪台機器上有datanode,就在哪台機器上裝一個spark,為了維持資料本地性
standalone叢集模式
spark提供的模式
主:master
從:worker
worker的作用是在機器上啟動executor程序
1. 配置slaves
# A Spark Worker will be started on each of the machines listed below.
bigdata1
bigdata2
2. 配置master
bigdata3
3. 配置spark-env.sh
###jdk dir
export JAVA_HOME=/home/hadoop/jdk1.7/jdk1.7.0_51
###scala dir
export SCALA_HOME=/home/hadoop/scala
###the ip of master node of spark
export SPARK_MASTER_IP=bigdata3
export SPARK_MASTER_PORT=7077
###the max memory size of worker
export SPARK_WORKER_CORES=1 一個線程
export SPARK_WORKER_INSTANCES=1 一個實體節點隻有一個worker程序
export SPARK_WORKER_MEMORY=2048m
啟動
./sbin/start-all.sh
http://192.168.1.113:8080
任務測試
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://bigdata3:7077 --executor-memory 512m --total-executor-cores 1 ./lib/spark-examples-1.5.1-hadoop2.6.0.jar 100
這兩個選項可以不用配,預設
--executor-memory:執行任務所需記憶體
--total-executor-cores:整個application占幾核,如果為1的話隻能同步執行一個executor
一個application可以切分為多個job,根據action來切分,一個application對應一個driver,driver是用來配置設定task到worker中執行
client模式:結果可以直接在指令行可見,送出程式的用戶端,driver也在該台機器
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://bigdata3:7077 --executor-memory 512m --total-executor-cores 1 ./lib/spark-examples-1.5.1-hadoop2.6.0.jar 100
--deploy-mode預設是client
cluster模式:結果在送出用戶端看不到,driver扔到worker所在的節點去執行,想看結果得找driver所在的worker節點。
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://bigdata3:7077 --deploy-mode cluster --executor-memory 512m --total-executor-cores 1 ./lib/spark-examples-1.5.1-hadoop2.6.0.jar 100
standalone做HA
可以使用zookeeper做熱備,master挂了另一個自動接管
可以使用本地檔案系統做冷備,如果master挂了,需要手動啟動另一個master且手動讀取本地檔案系統的中繼資料資訊。
配置spark-env.sh
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata1:2181,bigdata2:2181,bigdata3:2181"
啟動zookeeper
重新開機spark叢集
配置熱備master
将備用節點的spark-env.sh中的export SPARK_MASTER_IP=bigdata2改為本節點名
啟動備用master
bigdata2節點上 ./sbin/start-master.sh
此時bigdata3上的master狀态為alive,bigdata2上的master狀态為standby
節點接管時間1-2分鐘,在這段時間内無法送出新的應用程式,正在跑的應用不影響
相當于運作了一個spark應用程式,在bigdata3:8080頁面可看到
./spark-shell --master spark://bigdata3:7077
自動建立一個應用程式,并且提供了sparkcontext,可以直接使用
Spark_Yarn叢集模式搭建
配置spark-env.sh
###jdk dir
export JAVA_HOME=/home/hadoop/jdk1.7/jdk1.7.0_51
###scala dir
export SCALA_HOME=/home/hadoop/scala
###the ip of master node of spark
export SPARK_MASTER_IP=bigdata3
export SPARK_MASTER_PORT=7077
###the max memory size of worker
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=2048m
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata1:2181,bigdata2:2181,bigdata3:2181"
###hadoop configuration file dir
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=/home/hadoop/spark/
export SPARK_JAR=$SPARK_HOME/lib/spark-assembly-1.5.1-hadoop2.6.0.jar
export PATH=$SPARK_HOME/bin:$PATH
此時不能./sbin/start-all.sh了,start-all.sh會啟動master,和yarn沖突,産生資源争搶
此時環境已經準備好了,跑任務試試
./spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client --executor-memory 1G --num-executors 1 ./../lib/spark-examples-1.5.1-hadoop2.6.0.jar 100
寫yarn-client會自動的找active的resourcemanager
執行過程
yarn如何run spark
會将代碼example jar包、assembly jar包送出到HDFS中去,driver驅動程式會在本地運作example jar,example中是spark代碼,送出上去需要一個spark的環境,然後找到spark的一些相關資訊
master和resourcemanager是配置設定資源的
driver是配置設定task的
yarn模式下,resourcemanager配置設定資源,指定spark任務跑在哪幾個節點,然後在這幾個節點上會有對應的nodemanager建立container,container中跑的任務就是由driver來指定的。
driver找resourcemanager申請資源,resourcemanager給driver配置設定資源,driver向對應的節點再次申請資源,找nodemanager,nodemanager建立container來跑任務, driver将task任務發送到container中執行,task任務執行完後會将結果傳回給driver,當所有task任務跑完後,driver會告訴resourcemanager,自己的任務跑完了,resourcemanager就會通知nodemanager銷毀container回收資源。
在yarn環境中,driver叫做application master
yarn
resourcemanager
nodemanager
applicationmaster
container
yarn-cluster
./spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster --executor-memory 1G --num-executors 1 ./../lib/spark-examples-1.5.1-hadoop2.6.0.jar 100
client和cluster的差別:driver所在的位置不一樣
client模式:driver在執行任務的用戶端
cluster模式:driver會放在叢集中某個從節點執行,任務名:package包+類名