1. 程式人生 > >spark yarn-client和yarn-cluster

spark yarn-client和yarn-cluster

<iframe id="iframeu1728839_0" src="http://pos.baidu.com/acom?rdid=1728839&amp;dc=2&amp;di=u1728839&amp;dri=0&amp;dis=0&amp;dai=3&amp;ps=454x1133&amp;dcb=BAIDU_EXP_UNION_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=402&amp;tpr=1453685569228&amp;ti=Spark%20on%20YARN%E4%B8%A4%E7%A7%8D%E8%BF%90%E8%A1%8C%E6%A8%A1%E5%BC%8F%E4%BB%8B%E7%BB%8D-Spark-about%E4%BA%91%E5%BC%80%E5%8F%91&amp;ari=1&amp;dbv=2&amp;drs=1&amp;pcs=1349x667&amp;pss=1349x751&amp;cfv=0&amp;cpl=5&amp;chi=1&amp;cce=true&amp;cec=GBK&amp;tlm=1453685569&amp;ltu=http%3A%2F%2Fwww.aboutyun.com%2Fthread-12294-1-1.html&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dpug6G2-JYwtmlyHEkhz-1l63clVbVNMtp00sQVN8W5Ak9kIGlx6rfGKOwckeCeB4EANi8nstHULFhufxnMKPZa%26wd%3D%26eqid%3Db74bc0a8000d5dcd0000000556a57a38&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=7&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1453685570&amp;exps=110211&amp;qn=7e6fb7736e0b77a3&amp;tt=1453685569188.405.1555.1555&amp;feid=110211" width="120" height="240" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="word-wrap: break-word; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;"></iframe>
問題導讀


1.Spark在YARN中有幾種模式?
2.Yarn Cluster模式,Driver程式在YARN中執行,應用的執行結果在什麼地方可以檢視?
3.由client向ResourceManager提交請求,並上傳jar到HDFS上包含哪些步驟?
4.傳遞給app的引數應該通過什麼來指定?
5.什麼模式下最後將結果輸出到terminal中?






Spark在YARN中有yarn-cluster和yarn-client兩種執行模式: I. Yarn Cluster Spark Driver首先作為一個ApplicationMaster在YARN叢集中啟動,客戶端提交給ResourceManager的每一個job都會在叢集的worker節點上分配一個唯一的ApplicationMaster,由該ApplicationMaster管理全生命週期的應用。因為Driver程式在YARN中執行,所以事先不用啟動Spark Master/Client,應用的執行結果不能在客戶端顯示(可以在history server中檢視),所以最好將結果儲存在HDFS而非stdout輸出,客戶端的終端顯示的是作為YARN的job的簡單執行狀況。

by @Sandy Ryza

by 明風@taobao
從terminal的output中看到任務初始化更詳細的四個步驟:
  1. 14/09/28 11:24:52 INFO RMProxy: Connecting to ResourceManager at hdp01/172.19.1.231:8032
  2. 14/09/28 11:24:52 INFO Client: Got Cluster metric info from ApplicationsManager (ASM), number of NodeManagers: 4
  3. 14/09/28 11:24:52 INFO Client: Queue info ... queueName: root.default, queueCurrentCapacity: 0.0, queueMaxCapacity: -1.0,
  4. queueApplicationCount = 0, queueChildQueueCount = 0
  5. 14/09/28 11:24:52 INFO Client: Max mem capabililty of a single resource in this cluster 8192
  6. 14/09/28 11:24:53 INFO Client: Uploading file:/usr/lib/spark/examples/lib/spark-examples_2.10-1.0.0-cdh5.1.0.jar to hdfs://hdp01:8020/user/spark/.sparkStaging/application_1411874193696_0003/spark-examples_2.10-1.0.0-cdh5.1.0.jar
  7. 14/09/28 11:24:54 INFO Client: Uploading file:/usr/lib/spark/assembly/lib/spark-assembly-1.0.0-cdh5.1.0-hadoop2.3.0-cdh5.1.0.jar to hdfs://hdp01:8020/user/spark/.sparkStaging/application_1411874193696_0003/spark-assembly-1.0.0-cdh5.1.0-hadoop2.3.0-cdh5.1.0.jar
  8. 14/09/28 11:24:55 INFO Client: Setting up the launch environment
  9. 14/09/28 11:24:55 INFO Client: Setting up container launch context
  10. 14/09/28 11:24:55 INFO Client: Command for starting the Spark ApplicationMaster: List($JAVA_HOME/bin/java, -server, -Xmx512m, -Djava.io.tmpdir=$PWD/tmp, -Dspark.master="spark://hdp01:7077", -Dspark.app.name="org.apache.spark.examples.SparkPi", -Dspark.eventLog.enabled="true", -Dspark.eventLog.dir="/user/spark/applicationHistory", -Dlog4j.configuration=log4j-spark-container.properties, org.apache.spark.deploy.yarn.ApplicationMaster, --class, org.apache.spark.examples.SparkPi, --jar , file:/usr/lib/spark/examples/lib/spark-examples_2.10-1.0.0-cdh5.1.0.jar, , --executor-memory, 1024, --executor-cores, 1, --num-executors , 2, 1>, <LOG_DIR>/stdout, 2>, <LOG_DIR>/stderr)
  11. 14/09/28 11:24:55 INFO Client: Submitting application to ASM
  12. 14/09/28 11:24:55 INFO YarnClientImpl: Submitted application application_1411874193696_0003
  13. 14/09/28 11:24:56 INFO Client: Application report from ASM:
  14. application identifier: application_1411874193696_0003
  15. appId: 3
  16. clientToAMToken: null
  17. appDiagnostics:
  18. appMasterHost: N/A
  19. appQueue: root.spark
  20. appMasterRpcPort: -1
  21. appStartTime: 1411874695327
  22. yarnAppState: ACCEPTED
  23. distributedFinalState: UNDEFINED
  24. appTrackingUrl: http://hdp01:8088/proxy/application_1411874193696_0003/
  25. appUser: spark
複製程式碼
1. 由client向ResourceManager提交請求,並上傳jar到HDFS上
這期間包括四個步驟:
a). 連線到RM
b). 從RM ASM(ApplicationsManager )中獲得metric、queue和resource等資訊。
c). upload app jar and spark-assembly jar
d). 設定執行環境和container上下文(launch-container.sh等指令碼)

2. 
ResouceManager向NodeManager申請資源,建立Spark ApplicationMaster(每個SparkContext都有一個ApplicationMaster)
3. NodeManager啟動Spark App Master,並向ResourceManager AsM註冊
4. Spark ApplicationMaster從HDFS中找到jar檔案,啟動DAGscheduler和YARN Cluster Scheduler
5. ResourceManager向ResourceManager AsM註冊申請container資源(INFO YarnClientImpl: Submitted application)
6. ResourceManager通知NodeManager分配Container,這時可以收到來自ASM關於container的報告。(每個container的對應一個executor)
7. Spark ApplicationMaster直接和container(executor)進行互動,完成這個分散式任務。
需要注意的是:
a). Spark中的localdir會被yarn.nodemanager.local-dirs替換
b). 允許失敗的節點數(spark.yarn.max.worker.failures)為executor數量的兩倍數量,最小為3.
c). SPARK_YARN_USER_ENV傳遞給spark程序的環境變數
d). 傳遞給app的引數應該通過–args指定。
部署:
環境介紹:

hdp0[1-4]四臺主機
hadoop使用CDH 5.1版本: hadoop-2.3.0+cdh5.1.0+795-1.cdh5.1.0.p0.58.el6.x86_64
直接下載對應2.3.0的pre-build版本http://spark.apache.org/downloads.html
下載完畢後解壓,檢查spark-assembly目錄:
  1. file /home/spark/spark-1.1.0-bin-hadoop2.3/lib/spark-assembly-1.1.0-hadoop2.3.0.jar
  2. /home/spark/spark-1.1.0-bin-hadoop2.3/lib/spark-assembly-1.1.0-hadoop2.3.0.jar: Zip archive data, at least v2.0 to extract
複製程式碼

然後輸出環境變數HADOOP_CONF_DIR/YARN_CONF_DIR和SPARK_JAR(可以設定到spark-env.sh中)
  1. export HADOOP_CONF_DIR=/etc/hadoop/etc
  2. export SPARK_JAR=/home/spark/spark-1.1.0-bin-hadoop2.3/lib/spark-assembly-1.1.0-hadoop2.3.0.jar
複製程式碼

如果使用cloudera manager 5,在Spark Service的操作中可以找到Upload Spark Jar將spark-assembly上傳到HDFS上。




Spark Jar Location (HDFS) 
spark_jar_hdfs_path
/user/spark/share/lib/spark-assembly.jar 預設值 The location of the Spark jar in HDFS
Spark History Location (HDFS) 
spark.eventLog.dir
/user/spark/applicationHistory 預設值 The location of Spark application history logs in HDFS. Changing this value will not move existing logs to the new location.
提交任務,此時在YARN的web UI和history Server上就可以看到執行狀態資訊。
  1. spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster /usr/lib/spark/examples/lib/spark-examples_2.10-1.0.0-cdh5.1.0.jar
複製程式碼
II. yarn-client (YarnClientClusterScheduler)檢視對應類的檔案
在yarn-client模式下,Driver執行在Client上,通過ApplicationMaster向RM獲取資源。本地Driver負責與所有的executor container進行互動,並將最後的結果彙總。結束掉終端,相當於kill掉這個spark應用。一般來說,如果執行的結果僅僅返回到terminal上時需要配置這個。


客戶端的Driver將應用提交給Yarn後,Yarn會先後啟動ApplicationMaster和executor,另外ApplicationMaster和executor都 是裝載在container裡執行,container預設的記憶體是1G,ApplicationMaster分配的記憶體是driver- memory,executor分配的記憶體是executor-memory。同時,因為Driver在客戶端,所以程式的執行結果可以在客戶端顯 示,Driver以程序名為SparkSubmit的形式存在。
配置YARN-Client模式同樣需要HADOOP_CONF_DIR/YARN_CONF_DIR和SPARK_JAR變數。
提交任務測試:
  1. spark-submit --class org.apache.spark.examples.SparkPi --deploy-mode client /usr/lib/spark/examples/lib/spark-examples_2.10-1.0.0-cdh5.1.0.jar
  2. terminal output:
  3. 14/09/28 11:18:34 INFO Client: Command for starting the Spark ApplicationMaster: List($JAVA_HOME/bin/java, -server, -Xmx512m, -Djava.io.tmpdir=$PWD/tmp, -Dspark.tachyonStore.folderName="spark-9287f0f2-2e72-4617-a418-e0198626829b", -Dspark.eventLog.enabled="true", -Dspark.yarn.secondary.jars="", -Dspark.driver.host="hdp01", -Dspark.driver.appUIHistoryAddress="", -Dspark.app.name="Spark Pi", -Dspark.jars="file:/usr/lib/spark/examples/lib/spark-examples_2.10-1.0.0-cdh5.1.0.jar", -Dspark.fileserver.uri="http://172.19.17.231:53558", -Dspark.eventLog.dir="/user/spark/applicationHistory", -Dspark.master="yarn-client", -Dspark.driver.port="35938", -Dspark.httpBroadcast.uri="http://172.19.17.231:43804", -Dlog4j.configuration=log4j-spark-container.properties, org.apache.spark.deploy.yarn.ExecutorLauncher, --class, notused, --jar , null, --args 'hdp01:35938' , --executor-memory, 1024, --executor-cores, 1, --num-executors , 2, 1>, <LOG_DIR>/stdout, 2>, <LOG_DIR>/stderr)
  4. 14/09/28 11:18:34 INFO Client: Submitting application to ASM
  5. 14/09/28 11:18:34 INFO YarnClientSchedulerBackend: Application report from ASM:
  6. appMasterRpcPort: -1
  7. appStartTime: 1411874314198
  8. yarnAppState: ACCEPTED
  9. ......
複製程式碼 ##最後將結果輸出到terminal中 轉自:http://www.aboutyun.com/thread-12294-1-1.html

相關推薦

spark yarn-clientyarn-cluster

<iframe id="iframeu1728839_0" src="http://pos.baidu.com/acom?rdid=1728839&amp;dc=2&amp;di=u1728839&amp;dri=0&amp;dis=0&amp;dai=3&a

再論Yarn ClientYarn cluster

1、先看看Yarn client的架構示意圖 Yarn Client首先在Client端啟動Driver,就是在Client

Spark on Yarn ClientCluster模式詳解

Spark在YARN中有yarn-cluster和yarn-client兩種執行模式: I. Yarn Cluster Spark Driver首先作為一個ApplicationMaster在YARN叢集中啟動,客戶端提交給ResourceManager的每一個job都

yarn client分散式叢集方式執行spark-2.3.2-bin-hadoop2.6

一以分散式叢集執行 修改配置檔案/hadoop_opt/spark-2.3.2-bin-hadoop2.6/conf/spark-env.sh export HADOOP_CONF_DIR=/hadoop_opt/hadoop-2.6.1/etc/hadoop expo

Sparkyarn模式兩種提交任務方式(yarn-clientyarn-cluster

Spark可以和Yarn整合,將Application提交到Yarn上執行,和StandAlone提交模式一樣,Yarn也有兩種提交任務的方式。 1.yarn-client提交任務方式 配置 在client節點配置中spark-en

Spark on yarn的兩種模式 yarn-cluster yarn-client

然而 技術 負責 blog 作業 mage 申請 .com contain 從深層次的含義講,yarn-cluster和yarn-client模式的區別其實就是Application Master進程的區別,yarn-cluster模式下,driver運行在AM(Appli

SparkYarn-ClusterYarn-Client的區別

0 首先注意的概念 ResourceManager:是叢集所有應用程式的資源管理器,能夠管理叢集的計算資源併為每個Application分配,它是一個純粹的排程器。 NodeManager:是每一臺slave機器的代理,執行應用程式,並監控應用程式的資源使用情況。 Ap

SparkYarn-ClusterYarn-Client的區別

0 首先注意的概念 ResourceManager:是叢集所有應用程式的資源管理器,能夠管理叢集的計算資源併為每個Application分配,它是一個純粹的排程器。 NodeManager:是每一臺slave機器的代理,執行應用程式,並監控應用程式的資源使用

Spark-submit模式yarn-clusteryarn-client的區別

1.yarn-client用於測試,因為ta的Driver執行在本地客戶端,會與yarn叢集產生較大的網路通訊,從而導致網絡卡流量激增;它的好處在於直接執行時,在本地可以檢視到所有的log,方便除錯;

sparkyarn上面的執行模型:yarn-clusteryarn-client兩種執行模式:

 Spark在YARN中有yarn-cluster和yarn-client兩種執行模式: I. Yarn Cluster Spark Driver首先作為一個ApplicationMaster在YARN叢集中啟動,客戶端提交給ResourceManager的每一個job

Spark Yarn-clusterYarn-client

-s 生成 med apache 分享 多個 submit cat 方便 總覽二者 在Spark中,有Yarn-Client和Yarn-Cluster兩種模式可以運行在Yarn上,通常Yarn-Cluster適用於生產環境,而Yarn-Clientr更適用於交互,調試模式,

YARN-ClusterYARN-Client的區別

理解YARN-Client和YARN-Cluster深層次的區別之前先清楚一個概念:Application Master。在YARN中,每個Application例項都有一個ApplicationMaster程序,它是Application啟動的第一個容器。它負

yarn-clusteryarn-client模式剖析

之前以standalone模式剖析過spark程式的執行流程,這裡來剖析下其他兩種模式(yarn-cluster和yarn-client)的區別。一般yarn-client用於測試環境除錯程式;yarn-cluster用於生產環境。看完下面的剖析就明白為什麼。一、yarn-c

Spark 學習筆記之 Standalone與Yarn啟動運行時間測試

span ima 上傳 運行 yarn erl 技術分享 word wordcount Standalone與Yarn啟動和運行時間測試: 寫一個簡單的wordcount: 打包上傳運行: Standalone啟動: 運行時間:

spark.yarn.jarspark.yarn.archive的使用

啟動Spark任務時,在沒有配置spark.yarn.archive或者spark.yarn.jars時, 會看到不停地上傳jar非常耗時;使用spark.yarn.archive可以大大地減少任務的啟動時間,整個處理過程如下 1.在本地建立zip檔案 [email protected]:

spark-2.3.2-bin-hadoop2.6執行在yarn client

修改配置檔案/hadoop_opt/spark-2.3.2-bin-hadoop2.6/conf/spark-env.sh export HADOOP_CONF_DIR=/hadoop_opt/hadoop-2.6.1/etc/hadoop export J

spark on yarn記憶體CPU分配

以spark1.6為例,使用記憶體和CPU的無外乎三個:appMaster、driver、executor,下面分別分析spark on yarn的client與cluster模式下的記憶體和CPU分配一、vcores1、driver核數: client模式:無 cluster模式:spark.driver.

spark學習-執行spark on yarn 例子檢視日誌.

要通過web頁面檢視執行日誌,需要啟動兩個東西 hadoop啟動jobhistoryserver和spark的history-server. 相關配置檔案: etc/hadoop/mapred-site.xml <!--配置jobh

hive on spark通過YARN-client提交任務不成功

在Hive on spark中  設定spark.master 為 yarn-client , 提交HiveQL任務到yarn上執行,發現任務無法執行 輸出一下錯誤: 可以看到 Hive on S

Spark troubleshooting yarn-client 網絡卡流量激增

一、 yarn-client模式原理 1、執行命令 ./spark-submit --master yarn --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar