Map-Reduce淺析

Map-Reduce簡介

map-reduce是hadoop中第二個核心,用於對hdfs中的文件作映射-歸集處理。map階段能夠將文件中的數據以行的方式讀取出來處理成想要的基本數據類型或者自定義數據類型,生成key-value到文件中,reduce階段拿到已作過度組的key-value(多值),而後能夠對value循環作分組操做。靈活的使用key能夠完成很是強大的功能。sql

適合處理離線大批量數據的場景,不過編寫代碼有點麻煩,後面有了hive提供的sql接口,使用hql能夠像寫sql同樣操做數據,不用再寫繁瑣的mr代碼。可是hive並非萬能的,面對雜亂無章的數據文件,仍是須要編寫特定的mr程序作數據清洗,入到hdfs後方便hive操做網絡

MR工做流程

工做流程說明:app

1.在HDFS中準備好要處理的文件,大小200Moop

​ 2.與NameNode交互拿到文件信息,造成一個任務分配的規劃性能

​ 3.提交運行所需資源到HDFS中spa

​ 4.與ResourceManager交互,申請mr-AppMaster,由mr-AppMaster向ResouceManage申請執行MapTask和ReduceTask,有多少個切片就有多少個MapTask,ReduceTask依賴與分區數設計

​ 5.MapTask經過InputFormat->RecordReader(圖中的RecorderReader是錯誤的)讀取文件到內存。默認是TextInputFormat,也能夠自定義InputFormat和RecordReaderorm

​ 6.由本身編寫的Mapper對內存中的文件一行行的進行處理,好比將一行的數據轉換爲自定義的對象,而後作出value輸出給ReduceTask。若是沒有配置ReduceTask階段,那麼就會經過OutputCollector輸出文件到hdfs中對象

​ 7.有ReduceTask,Mapper會將數據送到環形緩衝區,由緩衝區決定何時批量將數據寫入到磁盤中。默認緩衝區使用到80%,緩衝區的數據通過分區和排序就會溢出寫到磁盤文件中。設計一個緩衝區在這裏能夠極大的提升性能排序

​ a.寫內存比寫磁盤快太多

​ b.數據批量從內存寫到磁盤,能夠提升數據在磁盤中存放的集中程度,不管是寫仍是之後的讀都會頗有幫助

​ c.若是沒有達到溢出的條件,ReduceTask直接從內存中拿數據

​ 8.對將要溢出的數據進行分區和排序

​ 9.溢出數據寫到磁盤文件中

​ 10.對溢出的多份數據作歸併和排序,造成新的文件

​ 11.若是設置了combiner(須要自定義),則會進行工做,它的做用將前面的內容進一步作聚合,減小磁盤開銷和網絡傳輸時間

​ 12.待MapTask結束,啓動ReduceTask任務(這個不是絕對的,有配置能夠干預ReduceTask啓動觸發條件)

​ 13.從各個MapTask任務哪裏拿到須要作Reduce的數據(內存或者文件),並作合併

​ 14.對數據作分組(分組的字段爲MapTask的輸出key)----此處和圖中有出入,以文字描述爲準

​ 15.讀取合併後的數據,作Reduce操做----此處和圖中有出入,以文字描述爲準

​ 16經過OutputFormat->RecordWriter把數據寫到hdfs的文件中。默認是TextOutputFormat,能夠自定義OutputFormat和RecordReader,好比根據不一樣的業務,將數據輸出到不一樣的文件中。

 

YARN做業提交流程

​ 0.Mr 程序提交到客戶端所在的節點。 1.Yarnrunner 向 Resourcemanager 申請一個 Application。 2.rm 將該應用程序的資源路徑返回給 yarnrunner。 3.該程序將運行所需資源提交到 HDFS 上。 4.程序資源提交完畢後,申請運行 mrAppMaster。 5.RM 將用戶的請求初始化成一個 task,該task會放入FIFO隊列中(task是客戶端提交的job,不是maptask和reducetask)。 6.其中一個 NodeManager 領取到 task 任務。 7.該 NodeManager 建立容器 Container, 併產生 MRAppmaster。 8.Container 從 HDFS 上拷貝資源到本地。 9.MRAppmaster 向 RM 申請運行 maptask 資源。 10.RM 將運行 maptask 任務分配給另外兩個 NodeManager, 另兩個 NodeManager 分別領取任務並建立容器。 11.MR 向兩個接收到任務的 NodeManager 發送程序啓動腳本, 這兩個 NodeManager 分別啓動 maptask, maptask 對數據分區排序。 12.MrAppMaster 等待全部 maptask 運行完畢後,向 RM 申請容器, 運行 reduce task。 13.reduce task 向 maptask 獲取相應分區的數據。 14.程序運行完畢後, MR 會向 RM 申請註銷本身。

FIFO調度器

先進先出調度器先按照做業優先級高低,再按照提交時間順序依次執行。

容量調度器

容量調度器包含多個隊列,每一個隊列分配必定比例的硬件資源,每一個隊列採用FIFO策略,同一用戶的做業所佔資源會被限制,防止該用戶獨佔計算資源。當一個做業提交上來時,按照以下策略進行:

1.計算每一個隊列中正在運行的任務數與該隊列所分配資源比值,選擇其中最小的隊列

2.根據做業優先級和提交順序,參考提交做業用戶的資源限制重排隊列內任務順序,而後執行做業中的task

公平調度器

公平調度器包含多個隊列,每一個隊列分配必定比例的硬件資源,每一個隊列採用缺額越大越優先執行的策略

缺額:每一個做業理論上應該得到硬件資源與實際得到硬件資源的差值

相關文章
相關標籤/搜索