1. 程式人生 > >hadoop任務的執行過程

hadoop任務的執行過程

3.1、任務提交

JobClient.runJob()建立一個新的JobClient例項,呼叫其submitJob()函式。

  • 向JobTracker請求一個新的job ID
  • 檢測此job的output配置
  • 計算此job的input splits
  • 將Job執行所需的資源拷貝到JobTracker的檔案系統中的資料夾中,包括job jar檔案,job.xml配置檔案,input splits
  • 通知JobTracker此Job已經可以運行了

提交任務後,runJob每隔一秒鐘輪詢一次job的進度,將進度返回到命令列,直到任務執行完畢。

3.2、任務初始化

當JobTracker收到submitJob呼叫的時候,將此任務放到一個佇列中,job排程器將從佇列中獲取任務並初始化任務。

初始化首先建立一個物件來封裝job執行的tasks, status以及progress。

在建立task之前,job排程器首先從共享檔案系統中獲得JobClient計算出的input splits。

其為每個input split建立一個map task。

每個task被分配一個ID。

3.3、任務分配

TaskTracker週期性的向JobTracker傳送heartbeat。

在heartbeat中,TaskTracker告知JobTracker其已經準備執行一個新的task,JobTracker將分配給其一個task。

在JobTracker為TaskTracker選擇一個task之前,JobTracker必須首先按照優先順序選擇一個Job,在最高優先順序的Job中選擇一個task。

TaskTracker有固定數量的位置來執行map task或者reduce task。

預設的排程器對待map task優先於reduce task

當選擇reduce task的時候,JobTracker並不在多個task之間進行選擇,而是直接取下一個,因為reduce task沒有資料本地化的概念。

3.4、任務執行

TaskTracker被分配了一個task,下面便要執行此task。

首先,TaskTracker將此job的jar從共享檔案系統中拷貝到TaskTracker的檔案系統中。

TaskTracker從distributed cache中將job執行所需要的檔案拷貝到本地磁碟。

其次,其為每個task建立一個本地的工作目錄,將jar解壓縮到檔案目錄中。

其三,其建立一個TaskRunner來執行task。

TaskRunner建立一個新的JVM來執行task。

被建立的child JVM和TaskTracker通訊來報告執行進度。

3.4.1、Map的過程

MapRunnable從input split中讀取一個個的record,然後依次呼叫Mapper的map函式,將結果輸出。

map的輸出並不是直接寫入硬碟,而是將其寫入快取memory buffer。

當buffer中資料的到達一定的大小,一個背景執行緒將資料開始寫入硬碟。

在寫入硬碟之前,記憶體中的資料通過partitioner分成多個partition。

在同一個partition中,背景執行緒會將資料按照key在記憶體中排序。

每次從記憶體向硬碟flush資料,都生成一個新的spill檔案。

當此task結束之前,所有的spill檔案被合併為一個整的被partition的而且排好序的檔案。

reducer可以通過http協議請求map的輸出檔案,tracker.http.threads可以設定http服務執行緒數。

3.4.2、Reduce的過程

當map task結束後,其通知TaskTracker,TaskTracker通知JobTracker。

對於一個job,JobTracker知道TaskTracer和map輸出的對應關係。

reducer中一個執行緒週期性的向JobTracker請求map輸出的位置,直到其取得了所有的map輸出。

reduce task需要其對應的partition的所有的map輸出。

reduce task中的copy過程即當每個map task結束的時候就開始拷貝輸出,因為不同的map task完成時間不同。

reduce task中有多個copy執行緒,可以並行拷貝map輸出。

當很多map輸出拷貝到reduce task後,一個背景執行緒將其合併為一個大的排好序的檔案。

當所有的map輸出都拷貝到reduce task後,進入sort過程,將所有的map輸出合併為大的排好序的檔案。

最後進入reduce過程,呼叫reducer的reduce函式,處理排好序的輸出的每個key,最後的結果寫入HDFS。

image

3.5、任務結束

當JobTracker獲得最後一個task的執行成功的報告後,將job得狀態改為成功。

當JobClient從JobTracker輪詢的時候,發現此job已經成功結束,則向用戶列印訊息,從runJob函式中返回。

相關推薦

Spark任務執行過程簡介

--executor-memory 每一個executor使用的記憶體大小 --total-executor-cores    整個application使用的核數 1.提交一個spark程式到spark叢集,會產生哪些程序?     

大資料基礎課之Hadoop MapReduce執行過程詳解

述一下mapreduce的流程(shuffle的sort,partitions,group) 首先是 Mapreduce經過SplitInput 輸入分片 決定map的個數在用Record記錄 key value。然後分為以下三個流程: Map: 輸入 key

spark on yarn圖形化任務監控利器:History-server幫你理解spark的任務執行過程

在spark on yarn任務進行時,大家都指導用4040埠監控(預設是,設定其他或者多個任務同時會遞增等例外); 辣麼,任務結束了,還要看圖形化介面,那就要開history-server了。CDH安裝spark on yarn的時候,就自動安裝了history的例項。

hadoop任務提交過程

WordCountMapper: private final static IntWritable one = new IntWritable(1); @Override public void map(LongWritable key, Text value, Context cont

spark任務執行過程的原始碼分析

spark任務執行的原始碼分析 在整個spark任務的編寫、提交、執行分三個部分:① 編寫程式和提交任務到叢集中 ②sparkContext的初始化③觸發action運算元中的runJob方法,執行任務 (1)程式設計程式並提交到叢集: ①程式設計spark程式的程式碼②打成jar包到叢集中執行③使用s

hadoop mapTask執行過程

1、執行run方法-->runJobSetupTask-->runNewMapper-->input.initialize(split, mapperContext)-->mapper.run(mapperContext) 2、重複呼叫map()方法,執行context.write(

MapReduce任務執行過程研究之Collect過程

最近一直在找工作,寫論文,對MapReduce原始碼的學習擱置了很久,想來想去認為不能放棄,有意義的事情一定要做好,要做到底,要盡力。前面的文章到後來寫的有些心不在焉,有應付之嫌,如今重新拾起,認真學習,認真寫下去。MR 2.0已經發布很久了,新架構新思想很值得學習,學無止

Hadoop MapReduce執行過程詳解(帶hadoop例子)

問題導讀1.MapReduce是如何執行任務的? 2.Mapper任務是怎樣的一個過程? 3.Reduce是如何執行任務的? 4.鍵值對是如何編號的? 5.例項,如何計算沒見最高氣溫? 分析MapReduce執行過程    MapReduce執行的時候,會通過Mapper執

hadoop任務執行過程

3.1、任務提交 JobClient.runJob()建立一個新的JobClient例項,呼叫其submitJob()函式。 向JobTracker請求一個新的job ID檢測此job的output配置計算此job的input splits將Job執行所需的資源拷貝到J

低優先級任務執行過程中高優先級任務在幹什麽

而在 必須 調度器 就會 便在 一個 中斷 正在 運行 在操作系統中,低優先級任務想要得到CPU的使用權,是建立在高優先級任務遇到阻塞語句的前提下,比如等待事件標誌、等待消息、等待信號量、遇見延遲函數等 而在低優先級任務執行過程中,高優先級任

記一次使用crontab計劃任務執行python指令碼所遇問題及處理的過程

今天把一個python指令碼遷移到Centos7,用crontab執行,期間遇到很多錯誤,最終把所遇問題一一處理,感覺有必要把處理過程記錄下來 1、問題環境 Centos7 x64 python2.7 和python 3.5 有安裝virtualenvwrappe

spring boot中得定時任務執行一段時間後突然停了 排查過程

在spring boot 專案中設定了一些定時任務,前幾天還執行得好好的,突然有一天就不再執行了,基本上呢都是執行了四天左右,定時任務停掉不在運行了,然後重啟程式定時任務就好使了,出現這麼兩次,第三次是在重啟以後第三天出現定時任務不再執行。感覺莫名其妙,查了好多資料,以下是關於我查到的關於定時任

hadoop中叢集提交任務執行

       叢集模式執行 1/將工程打成jar包,上傳到伺服器,然後用hadoop命令提交  hadoop jar wc.jar cn.itcast.hadoop.mr.wordcount.WCRunner 2/在linux的eclipse中直接執行main方法,也可以提

Oracle定時任務執行儲存過程帶引數

儲存過程: create or replace procedure pro_test (retCode out number, retMsg out varchar2) is  vcrm v_prod_inst%ROWTYPE; TYPE ref_cursor_type I

Hadoop 提交任務執行流程總結

用流水線可表示任務執行流程如下: input(k1,v1) -> map -> (k2,v2) -> combine -> shuffle(partitioner) -> sort -> (k2,v2) -> reduce -&

Hadoop on yarn執行過程

yarn:只做運算資源的分配和排程,不參與使用者程式內部工作, 正因為如此,我們的yarn可以成為一個通用的排程平臺, 所以,包括我們的mr程式、storm程式、spark程式都可以執行在我們的yarn叢集上 mapreduce和yarn的互動過程: 1、Client向Resource Ma

hadoop筆記1-MR執行過程

MR執行過程包括Map、Shuffler、Reduce,其中Map、Reduce及Shuffler中的分割槽、合併、排序是可以允許程式設計師程式設計參與的。 1、Map階段。 split-----map----partition sort and spill to dis

Hadoop詳解(二)——HDFS的命令,執行過程,Java介面,原理詳解。RPC機制

HDFS是Hadoop的一大核心,關於HDFS需要掌握的有:分散式系統與HDFS、HDFS的體系架構和基本概念、HDFS的shell操作、Java介面以及常用的API、Hadoop的RPC機制、遠端debugDistributed  File System資料量越來越多,在一

Hadoop 設定任務執行的佇列以及優先順序和其他 配置

作業提交到的佇列:mapreduce.job.queuename 作業優先順序:mapreduce.job.priority Pig版本: SET mapreduce.job.queuename root.etl.distcp; SET mapreduce.jo

MapReduce 作業提交執行過程程式碼分析(Hadoop 1.2.1)

MR工作過程大致分為以下幾步: 1:作業配置 2:提交作業  2.1:從JobTracker獲取新的JobID。 2.2:將該Job相關的資源(jar,libjars)傳送到JobTracker。