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

hadoop的mapreduce任務的執行流程

hadoop2.x的三大核心:mapreduce 、hdfs以及yarn ,其中核心之一mapreduce,利用了分而治之的思想,Map(對映)和 Reduce(歸約),分散式多處理然後進行彙總的思想,比如:清點撲克牌把裡面的花色都分開,一個人清點那麼可能耗時4分鐘,如果利用mapreduce的思想,把撲克牌分成4份,每個人對自己的那一份進行清點,然後4個人都清點完成之後把各自的相同花色放一起進行彙總,那麼這樣可能只會耗時1分鐘。這就是mapreduce的思想,其中每個人就相當於一個map,彙總就相當於是reduce,最開始的分牌就是patition分割槽(如果不均勻分配就相當於是資料傾斜),從map到reduce的過程就是shuffle。

下面就簡單說說我理解的mapreduce執行流程

這裡直接從map任務被執行說起。

1.當map任務開始執行的時候,會先根據使用者設定的FileInputFormat去讀取資料來源,預設是TextFileInputFormat讀取hdfs中的檔案(當然mapreduce內部也提供了其他的實現類,比如讀取資料庫的等等),我們也可以自己定義一個FileInputFormat,繼承FileInputFormat類就可以重寫isSplitable和createRecordReader方法並在createRecordReader方法裡面返回一個自定義的RecordReader例項就行(也是繼承RecordReader類就行,需要重寫裡面的getCurrentKey、close、getCurrentValue、getProgress、initialize、nextKeyValue這幾個方法可以參考:

http://blog.csdn.net/qq_20641565/article/details/52770522)

這裡寫圖片描述

2.當上面的處理完成後會進入到map方法,就以wordcount為例,這裡map收到的引數為檔案的一行例如資料是:“hello lijie hello word spark scala java java java”,然後對上面的一行進行split(” “)切分,然後用context.write輸出(hello ,1)(lijie ,1)(hello ,1)(word ,1)(spark ,1)(scala ,1)(java,1)(java,1)(java,1)

3.上面的輸出會先寫到一個緩衝區裡面(環形緩衝區,預設100M),當寫入百分之80的時候會對裡面的資料進行dump,dump的過程會對裡面的資料先進行分割槽然後排序,如果有combiner會進行區域性的combiner,之後寫入執行map程式的那臺伺服器的本地磁碟中,如果map一直執行,那麼會每滿百分之80又會執行上面的過程直到map執行完成

這裡寫圖片描述

3.上面的步驟走完之後產生了很多小的檔案,然後會觸發mr的檔案合併,把多個檔案進行合併,合併過程中又會進行排序和區域性的combiner,如果定義的是2個reduce,那麼最後每個map端就會生產2個分割槽檔案,並且檔案裡面的內容會已經排序且區域性combiner(前提是設定了combiner)

這裡寫圖片描述

4.map任務執行完成之後,reduce會從map端下載對應的檔案,並且又會對下載過來的檔案進行合併且排序並且會呼叫GroupComparator 物件(用來自定義哪些是一組的,mr程式預設key相同為同一組,但是可以自己定義GroupComparator,這樣不同的key也可以進入同一個reduce方法進行處理,詳情見:http://blog.csdn.net/qq_20641565/article/details/53491257

這裡寫圖片描述

5.執行reduce方法,並且執行reduce的邏輯,執行完成之後就會呼叫FileOutputFormat,這個同FileInputFormat一樣,同樣可以自定義,也是繼承FileOutPutFormat返回一個RecordWriter,這裡就不過多介紹,預設是TextFileOutputFormat寫入到hdfs裡面

6.整個mapreduce的執行流程就完成了,如果FileOutputFormat和FileInputFormat是預設的話,那麼資料流就是:HDFS -> 本地磁碟 ->HDFS,並且多次進行IO操作,所以mr的瓶頸在於他的IO操作,只適合進行離線計算

相關推薦

Spark任務執行流程

這是Spark官方給的圖,大致意思就是: 四個步驟 1.構建DAG(有向無環圖)(呼叫RDD上的方法) 2.DAGScheduler將DAG切分Stage(切分的依據是Shuffle),將Stage中生成的Task以TaskSet的形式給TaskSchedul

Quartz任務排程框架--任務執行流程(二)

       上一篇部落格Quartz任務排程框架--簡介與示例(一)中我們已經簡介和示例程式碼對quartz有了初步的認識,這篇部落格我們通過追蹤quartz的定時任務執行流程來加深對quartz的瞭解。 1、執行活動執行緒 (1)Quartz_Worker-*執行

Spark-任務執行流程

目錄 Application在叢集中執行的大概流程 Application提交的方式 Application提交的叢集 Application在叢集中執行的大概流程 流程: 1.Driver分發task到資料所在的節點上執行。

Hadoop 提交任務執行流程總結

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

Spark任務執行流程解析

Spark任務流程如下圖所示:        下面會根據該圖對每個步驟做詳細介紹:    1、RDD Objects RDD(ResilientDistributed Dataset)叫做分散式資料

spark的任務執行流程解析

一、從架構上看Spark的Job工作(Master\Worker) [睡著的水-hzjs-2016.8.18] 1.Master節點上是Master程序,主要是管理資源的,資源主要是記憶體和CPU。M

MapReduce之reducer任務執行流程詳解

第一階段是 Reducer 任務會主動從 Mapper 任務複製其輸出的鍵值對。Mapper 任務可能會有很多,因此 Reducer 會複製多個 Mapper 的輸出。第二階段是把複製到 Reducer 本地資料,全部進行合併,即把分散的資料合併成一個大的資料。再對合並後的資

死磕 java執行緒系列之執行緒池深入解析——普通任務執行流程

(手機橫屏看原始碼更方便) 注:java原始碼分析部分如無特殊說明均基於 java8 版本。 注:執行緒池原始碼部分如無特殊說明均指ThreadPoolExecutor類。 簡介 前面我們一起學習了Java中執行緒池的體系結構、構造方法和生命週期,本章我們一起來學習執行緒池中普通任務到底是怎麼執行的。

死磕 java執行緒系列之執行緒池深入解析——未來任務執行流程

(手機橫屏看原始碼更方便) 注:java原始碼分析部分如無特殊說明均基於 java8 版本。 注:執行緒池原始碼部分如無特殊說明均指ThreadPoolExecutor類。 簡介 前面我們一起學習了執行緒池中普通任務的執行流程,但其實執行緒池中還有一種任務,叫作未來任務(future task),使用它

死磕 java執行緒系列之執行緒池深入解析——定時任務執行流程

(手機橫屏看原始碼更方便) 注:java原始碼分析部分如無特殊說明均基於 java8 版本。 注:本文基於ScheduledThreadPoolExecutor定時執行緒池類。 簡介 前面我們一起學習了普通任務、未來任務的執行流程,今天我們再來學習一種新的任務——定時任務。 定時任務是我們經常會用到的一

Spark(六)Spark任務提交方式和執行流程

sla handles 解析 nod 就會 clust 它的 管理機 nag 一、Spark中的基本概念 (1)Application:表示你的應用程序 (2)Driver:表示main()函數,創建SparkContext。由SparkContext負責與Cluste

Activiti 使用者任務並行動態多例項(多使用者執行流程)

在很多情況下,我們需要多使用者共同執行餘下流程,比如開會流程: 領導發起開會,選擇開會人員(多個) 每個開會人員接收到通知後需要簽到(一名使用者簽到不會影響到另一位使用者的簽到) 簽到完成後則流程結束 如果只使用代理(Assignee、Candidate users、Candidate groups) 將

hadoop的mapreduce任務執行流程

hadoop2.x的三大核心:mapreduce 、hdfs以及yarn ,其中核心之一mapreduce,利用了分而治之的思想,Map(對映)和 Reduce(歸約),分散式多處理然後進行彙總的思想,比如:清點撲克牌把裡面的花色都分開,一個人清點那麼可能耗時4

Activiti學習筆記六 流程例項 任務 執行物件控制流程執行

上一篇我們看了流程定義,我們接下來看一下流程例項,任務,和執行物件。 流程例項 任務的執行 1.流程圖 2.部署流程定義 private final ProcessEngine processEngine = ProcessEngines.getDefaultP

Spark任務提交方式和執行流程

ref www. ack app cnblogs driver tex src tor 轉自:http://www.cnblogs.com/frankdeng/p/9301485.html 一、Spark中的基本概念 (1)Application:表示你的應用程序 (

宜信開源|分散式任務排程平臺SIA-TASK的架構設計與執行流程

  一、分散式任務排程的背景 無論是網際網路應用或者企業級應用,都充斥著大量的批處理任務。我們常常需要一些任務排程系統來幫助解決問題。隨著微服務化架構的逐步演進,單體架構逐漸演變為分散式、微服務架構。在此背景下,很多原先的任務排程平臺已經不能滿足業務系統的需求,於是出現了一些基於分散式的任務排程

windows 建立任務執行計劃 自動執行腳本

windows服務 images 需要 phpstudy 控制 服務器 window 一個 模式 對於windows服務器網站如果要定時執行腳本,則需要在windows控制面板裏找到 管理工具,點擊任務計劃程序,創建任務填寫任務名稱 觸發器裏新建觸發條件,設置間隔時間 在

yii開發第一部分之執行流程

soap active def 情況 bug 控制 actions 時也 哈希 一 目錄文件 |-framework 框架核心庫 |--base 底層類庫文件夾,包含CApplication(應用類,負責全局的用戶請求處理,它管理的應用

《java並發編程實戰》讀書筆記5--任務執行, Executor框架

調度 生產 頁面 acc 消費者模式 退出 融合 可能 第一篇 6.1 在線程中執行任務 第一步要找出清晰的任務邊界。大多數服務器應用程序都提供了一種自然的任務邊界選擇方式:以獨立的請求為邊界。 -6.6.1 串行地執行任務 最簡單的任務調度策略是在單個線程中串行地執行各項

[貪心]任務執行順序

div 存儲 printf sum cmp .com color course str https://www.51nod.com/tutorial/course.html#!courseId=23 題目大意:有$N$個任務需要執行,第$i$個任務計算時占$R[i]$個空