Spark on yarn

Spark-on-YARN

1. 官方文檔

http://spark.apache.org/docs/latest/running-on-yarn.htmlhtml

2. 配置安裝

1.安裝hadoop須要安裝HDFS模塊和YARN模塊,HDFS必須安裝,spark運行時要把jar包存放到HDFS上。node

2.安裝Spark解壓Spark安裝程序到一臺服務器上,修改spark-env.sh配置文件,spark程序將做爲YARN的客戶端用於提交任務sql

export JAVA_HOME=/usr/local/jdk1.8.0_131shell

export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.3/etc/hadoopapache

3.啓動HDFSYARN服務器

3. 運行模式(cluster模式和client模式)

1.cluster模式app

./bin/spark-submit --class org.apache.spark.examples.SparkPi \分佈式

--master yarn \oop

--deploy-mode cluster \測試

--driver-memory 1g \

--executor-memory 1g \

--executor-cores 2 \

--queue default \

lib/spark-examples*.jar \

10

 

---------------------------------------------------------------------------------------------------------------------------------

./bin/spark-submit --class cn.edu360.spark.day1.WordCount \

--master yarn \

--deploy-mode cluster \

--driver-memory 1g \

--executor-memory 1g \

--executor-cores 2 \

--queue default \

/home/bigdata/hello-spark-1.0.jar \

hdfs://node-1.edu360.cn:9000/wc hdfs://node-1.edu360.cn:9000/out-yarn-1

 

 

2.client模式

./bin/spark-submit --class org.apache.spark.examples.SparkPi \

--master yarn \

--deploy-mode client \

--driver-memory 1g \

--executor-memory 1g \

--executor-cores 2 \

--queue default \

lib/spark-examples*.jar \

10

 

spark-shell必須使用client模式

./bin/spark-shell --master yarn --deploy-mode client

 

3.兩種模式的區別

cluster模式:Driver程序在YARN中運行,應用的運行結果不能在客戶端顯示,因此最好運行那些將結果最終保存在外部存儲介質(如HDFSRedisMysql)而非stdout輸出的應用程序,客戶端的終端顯示的僅是做爲YARNjob的簡單運行情況。

 

client模式:Driver運行在Client上,應用程序運行結果會在客戶端顯示,全部適合運行結果有輸出的應用程序(如spark-shell

 

4.原理

cluster模式:

 

 

Spark Driver首先做爲一個ApplicationMasterYARN集羣中啓動,客戶端提交給ResourceManager的每個job都會在集羣的NodeManager節點上分配一個惟一的ApplicationMaster,由該ApplicationMaster管理全生命週期的應用。具體過程:

 

1. clientResourceManager提交請求,並上傳jarHDFS

這期間包括四個步驟:

a).鏈接到RM

b).RMASMApplicationsManager )中得到metricqueueresource等信息。

c). upload app jar and spark-assembly jar

d).設置運行環境和container上下文(launch-container.sh等腳本)

 

2. ResouceManagerNodeManager申請資源,建立Spark ApplicationMaster(每一個SparkContext都有一個ApplicationMaster

3. NodeManager啓動ApplicationMaster,並向ResourceManager AsM註冊

4. ApplicationMasterHDFS中找到jar文件,啓動SparkContextDAGschedulerYARN Cluster Scheduler

5. ResourceManagerResourceManager AsM註冊申請container資源

6. ResourceManager通知NodeManager分配Container,這時能夠收到來自ASM關於container的報告。(每一個container對應一個executor

7. Spark ApplicationMaster直接和containerexecutor)進行交互,完成這個分佈式任務。

 

client模式:

 

 

client模式下,Driver運行在Client上,經過ApplicationMasterRM獲取資源。本地Driver負責與全部的executor container進行交互,並將最後的結果彙總。結束掉終端,至關於kill掉這個spark應用。通常來講,若是運行的結果僅僅返回到terminal上時須要配置這個。

 

客戶端的Driver將應用提交給Yarn後,Yarn會前後啓動ApplicationMasterexecutor,另外ApplicationMasterexecutor都 是裝載在container裏運行,container默認的內存是1GApplicationMaster分配的內存是driver- memoryexecutor分配的內存是executor-memory。同時,由於Driver在客戶端,因此程序的運行結果能夠在客戶端顯 示,Driver以進程名爲SparkSubmit的形式存在。

 

 

 

 

若是使用spark on yarn 提交任務,通常狀況,都使用cluster模式,該模式,Driver運行在集羣中,其實就是運行在ApplicattionMaster這個進程成,若是該進程出現問題,yarn會重啓ApplicattionMasterDriver),SparkSubmit的功能就是爲了提交任務。

 

若是使用交換式的命令行,必須用Client模式,該模式,Driver是運行在SparkSubmit進程中,由於收集的結果,必須返回到命令行(即啓動命令的那臺機器上),該模式,通常測試,或者運行spark-shellspark-sql這個交互式命令行是使用

 

注意:若是你配置spark-on-yarnclient模式,其實會報錯。

修改全部yarn節點的yarn-site.xml,在該文件中添加以下配置

 

<property>

    <name>yarn.nodemanager.pmem-check-enabled</name>

    <value>false</value>

</property>

 

<property>

    <name>yarn.nodemanager.vmem-check-enabled</name>

    <value>false</value>

</property>

相關文章
相關標籤/搜索