Spark集羣搭建node
下載安裝包解壓便可使用,測試(2.2版本)
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[1] ./examples/jars/spark-examples_2.11-2.2.0.jar 100shell
local[1]:1表明線程數
100:spark類中須要的一個參數,越大計算的越準apache
集羣搭建過程當中,基本上是哪臺機器上有datanode,就在哪臺機器上裝一個spark,爲了維持數據本地性app
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:8080oop
任務測試
./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 100url
standalone作HA
可使用zookeeper作熱備,master掛了另外一個自動接管
可使用本地文件系統作冷備,若是master掛了,須要手動啓動另外一個master且手動讀取本地文件系統的元數據信息。spa
配置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-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包+類名
在http://192.168.1.111:8088中點擊任務進去點擊logs能夠看到任務執行結果。