1. 程式人生 > >Spark on YARN簡介與執行wordcount(master、slave1和slave2)(博主推薦)

Spark on YARN簡介與執行wordcount(master、slave1和slave2)(博主推薦)

前期部落格

Spark On YARN模式

  這是一種很有前景的部署模式。但限於YARN自身的發展,目前僅支援粗粒度模式(Coarse-grained Mode)。這是由於YARN上的Container資源是不可以動態伸縮的,一旦Container啟動之後,可使用的資源不能再發生變化,不過這個已經在YARN計劃中了。 

  spark on yarn 的支援兩種模式: 
    1) yarn-cluster:適用於生產環境; 
    2) yarn-client:適用於互動、除錯,希望立即看到app的輸出 

  yarn-cluster和yarn-client的區別在於yarn appMaster,每個yarn app例項有一個appMaster程序,是為app啟動的第一個container;負責從ResourceManager請求資源,獲取到資源後,告訴NodeManager為其啟動container。yarn-cluster和yarn-client模式內部實現還是有很大的區別。如果你需要用於生產環境,那麼請選擇yarn-cluster

;而如果你僅僅是Debug程式,可以選擇yarn-client。

YARN概述

  YARN是什麼

  Apache Hadoop YARN(Yet Another Resource Negotiator,另一種資源協調者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統,可為上層應用提供統一的資源管理和排程,它的引入為叢集在利用率、資源統一管理和資料共享等方面帶來了巨大好處。

YARN在Hadoop生態系統中的位置

YARN產生的背景

  隨著網際網路高速發展導致資料量劇增,MapReduce 這種基於磁碟的離線計算框架已經不能滿足應用要求,從而出現了一些新的計算框架以應對各種場景,包括記憶體計算框架、流式計算框架和迭代式計算框架等,而MRv1 不能支援多種計算框架並存。

           

                  

YARN基本架構

        

ResourceManager(RM)

  ResourceManager負責叢集資源的統一管理和排程,承擔了 JobTracker 的角色,整個叢集只有“一個”,總的來說,RM有以下作用:

  1.處理客戶端請求

  2.啟動或監控ApplicationMaster

  3.監控NodeManager

  4.資源的分配與排程

NodeManager(NM)

  NodeManager管理YARN叢集中的每個節點。NodeManager 提供針對叢集中每個節點的服務,從監督對一個容器的終生管理到監視資源和跟蹤節點健康。MRv1 通過slot管理 Map 和 Reduce 任務的執行,而 NodeManager 管理抽象容器,這些容器代表著可供一個特定應用程式使用的針對每個節點的資源。NM有以下作用。

  1.管理單個節點上的資源

  2.處理來自ResourceManager的命令

  3.處理來自ApplicationMaster的命令

ApplicationMaster(AM)

  每個應用有一個,負責應用程式的管理 。ApplicationMaster 負責協調來自 ResourceManager 的資源,並通過 NodeManager 監視容器的執行和資源使用(CPU、記憶體等的資源分配)。請注意,儘管目前的資源更加傳統(CPU 核心、記憶體),但未來會支援新資源型別(比如圖形處理單元或專用處理裝置)。AM有以下作用:

  1.負責資料的切分

  2.為應用程式申請資源並分配給內部的任務

  3.任務的監控與容錯

Container

  Container 是 YARN 中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當AM向RM申請資源時,RM為AM返回的資源便是用Container表示的。YARN會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。

  Container有以下作用:

  對任務執行環境進行抽象,封裝CPU、記憶體等多維度的資源以及環境變數、啟動命令等任務執行相關的資訊

Spark on YARN執行架構解析

  回顧Spark基本工作流程

  以SparkContext為程式執行的總入口,在SparkContext的初始化過程中,Spark會分別建立DAGScheduler作業排程和TaskScheduler任務排程兩級排程模組。其中作業排程模組是基於任務階段的高層排程模組,它為每個Spark作業計算具有依賴關係的多個排程階段(通常根據shuffle來劃分),然後為每個階段構建出一組具體的任務(通常會考慮資料的本地性等),然後以TaskSets(任務組)的形式提交給任務排程模組來具體執行。而任務排程模組則負責具體啟動任務、監控和彙報任務執行情況。

            

YARN standalone/YARN cluster

  YARN standalone是0.9及之前版本的叫法,1.0開始更名為YARN cluster

  yarn-cluster(YarnClusterScheduler),是Driver和AM執行在一起,Client單獨的。

./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] [app options]

YARN standalone/YARN cluster

  Spark Driver首選作為一個ApplicationMaster在Yarn叢集中啟動,客戶端提交給ResourceManager的每一個job都會在叢集的worker節點上分配一個唯一的ApplicationMaster,由該ApplicationMaster管理全生命週期的應用。因為Driver程式在YARN中執行,所以事先不用啟動Spark Master/Client,應用的執行結果不能再客戶端顯示(可以在history server中檢視)。

              

YARN standalone/YARN cluster

            

YARN client

  yarn-client(YarnClientClusterScheduler)

  Client和Driver執行在一起(執行在本地),AM只用來管理資源

./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode client [options] [app options]

YARN client

  在Yarn-client模式下,Driver執行在Client上,通過ApplicationMaster向RM獲取資源。本地Driver負責與所有的executor container進行互動,並將最後的結果彙總。結束掉終端,相當於kill掉這個spark應用。一般來說,如果執行的結果僅僅返回到terminal上時需要配置這個。

            

如何選擇

  如果需要返回資料到client就用YARN client模式。

  資料儲存到hdfs的建議用YARN cluster模式。

其他配置和注意事項

  如何更改預設配置

spark_home/conf/spark-defaults.conf,每個app提交時都會使用他裡面的配置

--conf PROP=VALUE,為單獨的app指定個性化引數

  環境變數

spark_home/conf/spark-defaults.conf,每個app提交時都會使用他裡面的配置

spark.yarn.appMasterEnv.[EnvironmentVariableName]

  相關配置

      

        

特別注意

  在cluster mode下,yarn.nodemanager.local-dirs對?Spark executors 和Spark driver都管用, spark.local.dir將被忽略

  在client mode下, Spark executors 使用yarn.nodemanager.local-dirs, Spark driver使用spark.local.dir

  --files and –archives支援用#對映到hdfs

  --jars

spark-shell執行在YARN上(這是Spark on YARN模式)

     (包含YARN client和YARN cluster)(作為補充)

 登陸安裝Spark那臺機器

bin/spark-shell --master yarn-client

 或者

bin/spark-shell --master yarn

   包括可以加上其他的,比如控制記憶體啊等。這很簡單,不多贅述。

 

複製程式碼
[[email protected] spark-1.6.1-bin-hadoop2.6]$ bin/spark-shell --master yarn-client
17/03/29 22:40:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/03/29 22:40:04 INFO spark.SecurityManager: Changing view acls to: spark
17/03/29 22:40:04 INFO spark.SecurityManager: Changing modify acls to: spark
17/03/29 22:40:04 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(spark); users with modify permissions: Set(spark)
17/03/29 22:40:05 INFO spark.HttpServer: Starting HTTP Server
17/03/29 22:40:06 INFO server.Server: jetty-8.y.z-SNAPSHOT
17/03/29 22:40:06 INFO server.AbstractConnector: Started [email protected]0.0.0.0:35692
17/03/29 22:40:06 INFO util.Utils: Successfully started service 'HTTP class server' on port 35692.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.1
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60)
複製程式碼

提交spark作業

1、用yarn-client模式提交spark作業

在/usr/local/spark目錄下建立資料夾

vi spark_pi.sh
複製程式碼
$SPARK_HOME/bin/spark-submit \
--class org.apache.spark.examples.JavaSparkPi \
--master yarn-client \
--num-executors 1 \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar \
複製程式碼
chmod 777 spark_pi.sh
./spark_pi.sh

或者

[[email protected] ~]$  $SPARK_HOME/bin/spark-submit  \
> --class org.apache.spark.examples.JavaSparkPi \
> --master yarn-cluster \
> --num-executors 1 \
> --driver-memory 1g \
> --executor-memory 1g \
> --executor-cores 1 \
>  $SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar

2、用yarn-cluster模式提交spark作業

在/usr/local/spark目錄下建立資料夾

vi spark_pi.sh
$SPARK_HOME/bin/spark-submit \
--class org.apache.spark.examples.JavaSparkPi \
--master yarn-cluster \
--num-executors 1 \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar 
 chmod 777 spark_pi.sh
./spark_pi.sh

 或者

[[email protected] ~]$  $SPARK_HOME/bin/spark-submit  \
> --class org.apache.spark.examples.JavaSparkPi \
> --master yarn-cluster \
> --num-executors 1 \
> --driver-memory 1g \
> --executor-memory 1g \
> --executor-cores 1 \
>  $SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar
 Spark Standalone 下執行wordcount和Spark on YARN下執行wordcount(做個對比)

 1、Spark on YARN下執行wordcount

  具體,請移步

● wordcount程式碼

● mvn 專案打包上傳至Spark叢集。

● Spark 叢集提交作業

[[email protected] hadoop-2.6.0]$ $HADOOP_HOME/bin/hadoop fs -mkdir -p hdfs://master:9000/testspark/inputData/wordcount

[[email protected] ~]$ mkdir -p /home/spark/testspark/inputData/wordcount
[[email protected] hadoop-2.6.0]$ $HADOOP_HOME/bin/hadoop fs -copyFromLocal /home/spark/testspark/inputData/wordcount/wc.txt  hdfs://master:9000/testspark/inputData/wordcount/

   這裡在/home/spark/testspark下上傳mySpark-1.0-SNAPSHOT.jar省略

[[email protected] spark-1.6.1-bin-hadoop2.6]$ $SPARK_HOME/bin/spark-submit \
--master yarn-client \
--name scalawordcount \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
--class zhouls.bigdata.MyScalaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs:
//master:9000/testspark/outData/MyScalaWordCount


或者
[[email protected] spark-1.6.1-bin-hadoop2.6]$ $SPARK_HOME/bin/spark-submit \
--master yarn\
--deploy-mode client \
--name scalawordcount \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
--class zhouls.bigdata.MyScalaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/MyScalaWordCount
[[email protected] spark-1.6.1-bin-hadoop2.6]$ $SPARK_HOME/bin/spark-submit \
 --master yarn-cluster\
--name scalawordcount \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
--class zhouls.bigdata.MyScalaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/MyScalaWordCount



或者

[[email protected] spark-1.6.1-bin-hadoop2.6]$ $SPARK_HOME/bin/spark-submit \
--master yarn\
--deploy-mode cluster \
--name scalawordcount \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
--class zhouls.bigdata.MyScalaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/MyScalaWordCount
 
[[email protected] spark-1.6.1-bin-hadoop2.6]$ $SPARK_HOME/bin/spark-submit \
--master yarn-client \
--name javawordcount \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
--class zhouls.bigdata.MyJavaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/
MyJavaWordCount



或者
[[email protected] spark-1.6.1-bin-hadoop2.6]$ $SPARK_HOME/bin/spark-submit \
--master yarn\
--deploy-mode client \
--name javawordcount \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
--class zhouls.bigdata.MyJavaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/MyJavaWordCount
[[email protected] spark-1.6.1-bin-hadoop2.6]$ $SPARK_HOME/bin/spark-submit \
 --master yarn-cluster\
--name javawordcount \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
--class zhouls.bigdata.MyJavaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/
MyJavaWordCount




或者

[[email protected] spark-1.6.1-bin-hadoop2.6]$ $SPARK_HOME/bin/spark-submit \
--master yarn\
--deploy-mode cluster \
--name javawordcount \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
--class zhouls.bigdata.MyJavaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/
MyJavaWordCount

 2、Spark Standalone 下執行wordcount

具體,請移步

● wordcount程式碼

● mvn 專案打包上傳至Spark叢集。

● Spark 叢集提交作業

$SPARK_HOME/bin/spark-submit \

--master spark://master:7077 \
--class zhouls.bigdata.MyScalaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/MyScalaWordCount

 或者

$SPARK_HOME/bin/spark-submit \
--master spark://master:7077 \
--class zhouls.bigdata.MyJavaWordCount \
/home/spark/testspark/mySpark-1.0-SNAPSHOT.jar \
hdfs://master:9000/testspark/inputData/wordcount/wc.txt \
hdfs://master:9000/testspark/outData/MyJavaWordCount

相關推薦

Spark on YARN簡介執行wordcountmasterslave1slave2推薦

前期部落格 Spark On YARN模式   這是一種很有前景的部署模式。但限於YARN自身的發展,目前僅支援粗粒度模式(Coarse-grained Mode)。這是由於YARN上的Container資源是不可以動態伸縮的,一旦Container啟動之後,可使用

Spark standalone簡介執行wordcountmasterslave1slave2

 前期部落格 1. Standalone模式       即獨立模式,自帶完整的服務,可單獨部署到一個叢集中,無需依賴任何其他資源管理系統。從一定程度上說,該模式是其他兩種的基礎。借鑑Spark開發模式,我們可以得到一種開發新型計算框架的一般思路:先設計出它的s

Spark on YARN模式的安裝spark-1.6.1-bin-hadoop2.6.tgz + hadoop-2.6.0.tar.gzmasterslave1slave2推薦

說白了   Spark on YARN模式的安裝,它是非常的簡單,只需要下載編譯好Spark安裝包,在一臺帶有Hadoop YARN客戶端的的機器上執行即可。    Spark on YARN分為兩種: YARN cluster(YARN standalone,0.9版本以前)和 YA

Spark standalone模式的安裝spark-1.6.1-bin-hadoop2.6.tgzmasterslave1slave2

 前期部落格 開篇要明白   (1)spark-env.sh 是環境變數配置檔案   (2)spark-defaults.conf   (3)slaves 是從節點機器配置檔案   (4)metrics.properties 是 監控   (5)log4j.

記2018最後一次問題診斷-Spark on Yarn所有任務執行失敗

  2018的最後一個工作日,是在調式和診斷問題的過程中度過,原本可以按時下班,畢竟最後一天了,然鵝,確是一直苦苦掙扎。   廢話不多說,先描述一下問題:有一套大資料環境,是CDH版本的,總共4臺機子,我們的應用程式與大資料叢集之前已經整合完畢,除錯沒有問題,可以執行Spark任務。而與這個叢集整合是17年

Spark on Yarn解密及執行流程

一、Hadoop Yarn解析 1,Yarn是Hadoop推出整個分散式(大資料)叢集的資源管理器,負責資源的管理和分配,基於Yarn我們可以在同一個大資料叢集上同時執行多個計算框架,例如Spark、MapReduce、Storm等; 2,Yarn基本工作

大資料各子專案的環境搭建之建立刪除軟連線推薦

   建立軟連線,好處可以處理多個版本的需要,方便環境變數的配置。相當於windows下的快捷方式!    博主,我這裡以jdk為例,對於大資料的其他子專案的搭建,一樣的操作。方便!這裡我不多贅述。   如何建立jdk1.7版本的軟連結? [[email protect

Windows裏如何正確安裝Redis以服務運行推薦圖文詳解

tex files 64位 下載 win 多說 body 網盤下載 AC     不多說,直接上幹貨!      註意 : Redis官方並沒有提供Redis的windows安裝包,但在github上, 有相關的下載地址。

分區助手是什麽?推薦圖文詳解

post 操作 src 它的 公眾號 專業 分區 切割 ima     不多說,直接上幹貨!   分區助手是一個簡單易用且免費的磁盤分區管理軟件,在它的幫助下,你可以無損數據地執行調整分區大小,移動分區位置,復制分區,復制磁盤,合並分區,切割分區、恢復分

關於大數據領域各個組件打包部署到集群運行的總結含手動maven推薦

reduce count 圖片 bar big href alt 關於 hdfs 對於這裏的打包,總結:   (1) 最簡單的,也是為了適應公司裏,還是要用maven,當然spark那邊sbt,maven都可以。但是maven居多。 Eclipse/MyEclips

大數據搭建各個子項目時配置文件技巧適合CentOSUbuntu系統推薦

show 科研 對話 必備 ctrl+ 17. releases .html IV 不多說,直接上幹貨!   很多同行,也許都知道,對於我們大數據搭建而言,目前主流,分為Apache 和 Cloudera 和 Ambari。 後兩者我不多說,是公司必備和大多數高校

用maven來創建scalajava項目代碼環境圖文詳解Intellij IDEAUltimate版本Intellij IDEACommunity版本Scala IDEA for Eclipse皆適用推薦

搭建 ava XML .com 自動 ado ima 強烈 mapred 為什麽要寫這篇博客?   首先,對於spark項目,強烈建議搭建,用Intellij IDEA(Ultimate版本),如果你還有另所愛好嘗試Scala IDEA for Eclipse,有時間自己去

如何走上更高平臺分享傳遞幹貨知識:開通個人微信公眾號:大數據躺過的坑圖文詳解推薦

綁定 改名 alt 匯聚 oozie 管理 機器 傳遞 qpi 為了進一步打造提升(大數據躺過的坑)本微信公眾平臺的博文高質量水平,特邀請善於分享、主動、敢於專研嘗試新技術新領域的您,一起共同維護好我們的知識小天地。目前涉及領域有:大數據領域:Hadoop、Hive、HBa

ubuntu18.04 搭建hadoop完全分散式叢集Masterslave1slave2共三個節點

一、硬體配置以及作業系統: 所需要的機器以及作業系統:一臺mac os筆記本、一臺window筆記本(CPU雙核四執行緒,記憶體8G),其中mac os用於遠端操作,window筆記本裝有虛擬機器,虛擬出3個ubuntu18.04系統(配置CPU1個執行緒2個,記憶體1.5G,硬碟分配每個7

全網最詳細的基於Ubuntu14.04/16.04 + Anaconda2 / Anaconda3 + Python2.7/3.4/3.5/3.6安裝Tensorflow詳細步驟圖文推薦

  不多說,直接上乾貨! 前言   建議參照最新的tensorflow安裝步驟(Linux,官方網站經常訪問不是很穩定,所以給了一個github的地址):          https://github.com/tensorflow/tensorflow/blob/master/t

大資料入門基礎系列之初步認識大資料生態系統圈推薦

  不多說,直接上乾貨!   之前在微信公眾平臺裡寫過 大資料入門基礎系列之初步認識hadoop生態系統圈 http://mp.weixin.qq.com/s/KE09U5AbFnEdwht44FGrOA 大資料入門基礎系列之初步認識大資料生態系統圈 1.概述

如何走上更高平臺分享傳遞乾貨知識:開通個人微信公眾號:大資料躺過的坑圖文詳解推薦

  不多說,直接上乾貨!    為了進一步打造提升(大資料躺過的坑)本微信公眾平臺的博文高質量水平,特邀請善於分享、主動、敢於專研嘗試新技術新領域的您,一起共同維護好我們的知識小天地。目前涉及領域有:大資料領域:Hadoop、Hive、HBase、Zookeeper、Flume、Sqoop、Ka

Ambari叢集移動現有複製到另外地方或更改ip地址,導致各項服務元件上為黃色問號代表心跳丟失的解決方案圖文詳解推薦

前言          最近,是在做叢集搬移工作,大家肯定會遇到如下的場景。          (1) 比如,你新購買的電腦,初步者學習使用Ambari叢集。從舊電腦複製到新電腦這邊來。          (2) 比如,你公司Ambari叢集的ip,因業務或其他情況需要,暫時需要更改ip。  

如何走上更高平臺分享傳遞乾貨知識:開通個人Github面向開源及私有軟體專案的託管平臺:https://github.com/zlslch/圖文詳解推薦

歡迎您的加入! 微信公眾號平臺: 大資料躺過的坑 微信公眾號平臺: 人工智慧躺過的坑 大資料和人工智慧躺過的坑(總群): 161156071 更多QQ技術分群,詳情請見:http://www.cnblogs.com/zls

大資料入門基礎系列之Hadoop1.XHadoop2.XHadoop3.X的多維度區別詳解推薦

  不多說,直接上乾貨! 在前面的博文裡,我已經介紹了   見下面我寫的微信公眾號博文 歡迎大家,加入我的微信公眾號:大資料躺過的坑     免費給分享 同時,大家可以關注我的個人部