天天看點

Spark叢集搭建(local、standalone、yarn)

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包+類名

繼續閱讀