Mapreduce原理和YARN

MapReduce定義

MapReduce是一種分布式計算框架,由Google公司2004年首次提出,并貢獻給Apache基金會。

MR版本

  • MapReduce 1.0,Hadoop早期版本(只支持MR模型)
  • MapReduce 2.0,Hadoop 2.X版本(引入了YARN資源調度框架后,除了支持MR,還支持其他計算模型

image.png

MR V1 執行流程

image.png

  1. JobTracker一直在等待JobClient提交作業;
  2. TaskTracker每隔3秒向 JobTracker發送心跳heartbeat詢問有沒有任務可做,如果有,讓其派發任務給它執行;
  3. 這是一道pull過程: slave主動向master拉生意;

image.png

MR v2 vs MR v1 流程

MR v2運行機制的改進,啟動了YARN

  1. 增加了ResourceManager、NodeManager;
  2. ResourceManager(RM), 包含:ApplicationManager、ResourceScheduler兩種功能;即把應用管理和資源調度分開;
  3. NodeManager(NM)負責節點的運行,當收到任務時,啟動Container完成(map或reduce)任務;
  4. ResourceManager對應于v1的JobTracker;
  5. NodeManager對應于v1的TaskTracker

MR V2 執行流程

  1. 用戶向YARN中提交應用程序,其中包括MR App Mstr程序、啟動ApplicationMaster的命令、數據等。
  2. ResourceManager為該應用程序分配第一個Container,并與對應的NodeManager通信,要求它在這個Container中啟動應用程序的ApplicationMaster。
  3. ApplicationMaster首先向ResourceManager注冊,這樣,用戶可以直接通過ResourceManager查看應用程序的運行狀態,然后,它將為各個任務申請資源,并監控它的運行狀態,直到運行結束,即重復步驟4~7
  4. ApplicationMaster采用輪詢的方式通過RPC協議向ResourceManager申請和領取資源。
  5. 一旦ApplicationMaster申請到資源后,則與對應的NodeManager通信,要求其啟動任務。
  6. NodeManager為任務設置好運行環境(包括環境變量、jar包、二進制程序等)后,將任務啟動命令寫到一個腳本中,并通過運行該腳本啟動任務
  7. 各個任務通過某個RPC 協議向ApplicationMaster匯報自己的狀態和進度,以讓ApplicationMaster 隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啟動任務。在應用程序運行過程中,用戶可隨時通過RPC 向ApplicationMaster 查詢應用程序的當前運行狀態。
  8. 應用程序運行完成后,ApplicationMaster 向ResourceManager 注銷并關閉自己。

image.png

Resource Container, 資源容器

1)是集群節點將自身內存、CPU、磁盤等資源封裝在一
起的抽象概念;

2)調度器根據應用的資源需求和集群各個節點的資源容
器進行調度;

3)RM的應用管理器負責接收作業,協商獲取第一個資源
容器用于執行應用的任務主體并為重啟失敗的應用主體分
配容器;

4)DN節點的應用主體負責通過協商從調度器獲取資源容
器,并跟蹤這些容器的狀態和應用執行的情況

Mapper任務流程

image.png
① 讀取輸入文件,解析成key、value對。對輸入文件的每
一行(k1,v1),解析成多個key、value對(k2,v2)。每
個(k1、v1)鍵值對調用一次map函數;

② 寫代碼邏輯將輸入的k1、v1處理成新的k2、v2輸出;

③ 對輸出的k2、v2進行分區(如果不指定默認1個分區,
分區號為0);

④ 對不同分區的數據,按照k2進行排序、分組。相同k2的
v2放到集合v2’
={v21
,v22
,v23
,…v2n}中;

⑤ (可選)分組后的數據進行歸約(combiner);

⑥ Mapper的結果寫入本地磁盤

Reducer任務流程

① 對多個map任務的輸出,按照不同的分區,通過網絡
復制到不同的reduce節點(取map端的結果數據);

② 一個Reduce任務處理一個分區數據;

③ 對屬于當前分區的多個map任務的輸出結果進行合并
、排序。寫reduce函數的代碼,對輸入的k2,v2’處理
,轉換成新的k3、v3輸出;

④ 把reduce的輸出保存到文件中。文件名為 part-r- 0000N

MapReduce核心概念

  • 不同的Map任務之間不會進行通信
  • 不同的Reduce任務之間也不會發生任何信息交換
  • 用戶不能顯式地從一臺機器向另一臺機器發送消息
  • 所有的數據交換都是通過MapReduce框架自身去實現的

image.png

文件輸入格式InputFormat

定義了數據文件如何分割和讀取。InputFile提供了以下一些功能

  • 選擇文件或者其它對象,用來作為輸入
  • 定義InputSplits, 將一個文件分為不同任務
  • 為RecordReader提供一個工廠,用來讀取這個文件

例如:有一個抽象的類FileInputFormat,
FileInputFormat從這個目錄中讀取
所有文件,然后FileInputFormat將
這些文件分割為多個InputSplits。

輸入數據分塊InputSplits

InputSplit定義了輸入到單個Map任務的輸入數據

  • 一個MapReduce程序被統稱為一個Job,可能有上百個任務構成
  • InputSplit將文件分為128MB的大小

數據記錄讀入RecordReader

InputSplit定義了一個數據分塊,但是沒有定義如何讀取數據記錄。RecordReader實際上定義了如何將數據記錄轉化為一個(key,value)對的詳細方法,并將數據記錄傳給Mapper類。

例如:TextInputFormat提供了
LineRecordReader,讀入一個文
本行數據記錄

Mapper

每一個Mapper類的實例生成了一
個Java進程,負責處理某一個
InputSplit上的數據

  • V1中,有兩個額外參數OutputCollector以及Reporter,前者收集中間結果,后者獲得環境參數以及設當前執行的狀態。
  • 現在的版本V2用Context提供給每一個Mapper函數,用來提供上面兩個對象的功能

Combiner

對Map端的輸出進行合并,即合并相同key的鍵值對,以便
減少partitioner數據通信開銷。
可以不用指定;如果指定合并類,其性質類似于本地執行
的一個Reducer,滿足一定的條件才能夠執行

Partitioner & Shuffle&Sort

  • Partitioner & Shuffle
    在Map工作完成之后,每一個 Map函數的結果會被傳輸到對
    應Reducer所在的節點,此時用戶可以提供一個Partitioner
    類,用來決定一個給定的(key,value)對傳給哪個節點。

  • Sort
    傳輸到每一個Reducer節點上的、將被所有的Reduce函數接
    收到的Key,value對會被Hadoop自動排序(即Map生成的結
    果傳送到某一個節點的時候,會被自動排序)

Shuffle

Shuffle過程就是從map端輸出到reduce端輸入之間的過程;是Hadoop中最核心的部分!!!

image.png

Shuffle的Map端

  1. 在Map任務全部結束之前進行歸并
  2. 歸并得到大的文件放在本地磁盤
  3. 文件歸并時,如果溢寫文件數量大于預定值(默認是3)則可以再次啟動Combiner,少于3不需要
  4. JobTracker會一直監測Map任務的執行,并通知Reduce任務來領取數據

Shuffle的Reduce端

  1. Reduce任務通過RPC向JobTracker詢問Map任務是否已經完成,若完成,則領取數據
  2. Reduce領取數據先放入緩存,來自不同Map機器,先歸并,再合并寫入磁盤
  3. 多個溢寫文件歸并成一個或多個大文件,文件中的鍵值對是排序的
  4. 當數據很少時,不需要溢寫到磁盤,直接在緩存中歸并,然后輸出給Reduce

Reducer

做用戶定義的Reduce操作。
編程接口是Context。
一個分區對應一個Reducer。
每個分區對應一個輸出文件 part-r-0000X。

文件輸出格式OutputFormat

寫入到HDFS的所有OutputFormat
都繼承自FileOutputFormat
。 每一個Reducer都寫一個文件到一
個共同的輸出目錄,文件名是part- nnnnn,其中nnnnn是與每一個
reducer相關的一個號(partition id)

MapReduce-任務執行總結

  1. 提交作業
  2. 初始化作業
  3. 分配任務
  4. 執行任務
  5. 更新任務執行進度和狀態

推測式執行(speculative) –如果某個節點的任務執行過慢,會啟動備份任務

YARN定義

YARN 是Hadoop 2.0 中的資源管理系統
,它是一個通用的資源管理模塊,可為
各類應用程序進行資源管理和調度。

YARN三大組件

image.png

  1. ResourceManager –處理客戶端請求
  • 啟動/監控ApplicationMaster
  • 監控NodeManager
  • 資源分配與調度
  1. NodeManager –單個節點上的資源管理
  • 處理來自ResourceManager的命令
  • 處理來自ApplicationMaster的命令
  1. ApplicationMaster
  • 數據切分
  • 為應用程序申請資源,并分配給內部任務
  • 任務監控與容錯

YARN資源調度器

  • FIFO,先進先出調度器
  • Fair Scheduler,公平調度器
  • Capacity Scheduler,容量調度器

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據可視化圖表類型_數據可視化中12種最常見的圖表類型

數據可視化圖表類型In the current era of large amounts of information in the form of numbers available everywhere, it is a difficult task to understand and get insights from these dense piles of data.在當今時代,到處都是數字形式的大量信息&#xff…

三大紀律七項注意(Access數據庫)

三大紀律(規則或范式) 要有主鍵其他字段依賴主鍵其他字段之間不能依賴七項注意 一表一主鍵(訂單表:訂單號;訂單明細表:訂單號產品編號)經常查,建索引,小數據(日期,數字類…

CentOS下安裝JDK的三種方法

來源:Linux社區 作者:spiders http://www.linuxidc.com/Linux/2016-09/134941.htm 由于各Linux開發廠商的不同,因此不同開發廠商的Linux版本操作細節也不一樣,今天就來說一下CentOS下JDK的安裝: 方法一:手動解壓JDK的壓縮包,然后…

MapReduce編程

自定義Mapper類 class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> &#xff5b; … }自定義mapper類都必須實現Mapper類&#xff0c;有4個類型參數&#xff0c;分別是&#xff1a; Object&#xff1a;Input Key Type-------------K1Text: Input…

統計信息在數據庫中的作用_統計在行業中的作用

統計信息在數據庫中的作用數據科學與機器學習 (DATA SCIENCE AND MACHINE LEARNING) Statistics are everywhere, and most industries rely on statistics and statistical thinking to support their business. The interest to grasp on statistics also required to become…

IOS手機關于音樂自動播放問題的解決辦法

2019獨角獸企業重金招聘Python工程師標準>>> 評估手機自帶瀏覽器不能識別 aduio標簽重的autoplay屬性 也不能自動執行play()方法 一個有效的解決方案是在微信jssdk中調用play方法 document.addEventListener("WeixinJSBridgeReady", function () { docum…

svg標簽和svg文件區別_什么是SVG文件? SVG圖片和標簽說明

svg標簽和svg文件區別SVG (SVG) SVG or Scalable Vector Graphics is a web standard for defining vector-based graphics in web pages. Based on XML the SVG standard provides markup to describe paths, shapes, and text within a viewport. The markup can be embedded…

開發人員怎么看實施人員

英文原文&#xff1a;What Developers Think Of Operations&#xff0c;翻譯&#xff1a;張紅月CSDN 在一個公司里面&#xff0c;開發和產品實施對于IS/IT的使用是至關重要的&#xff0c;一個負責產品的研發工作&#xff0c;另外一個負責產品的安裝、調試等工作。但是在開發人員…

怎么評價兩組數據是否接近_接近組數據(組間)

怎么評價兩組數據是否接近接近組數據(組間) (Approaching group data (between-group)) A typical situation regarding solving an experimental question using a data-driven approach involves several groups that differ in (hopefully) one, sometimes more variables.使…

代碼審計之DocCms漏洞分析

0x01 前言 DocCms[音譯&#xff1a;稻殼Cms] &#xff0c;定位于為企業、站長、開發者、網絡公司、VI策劃設計公司、SEO推廣營銷公司、網站初學者等用戶 量身打造的一款全新企業建站、內容管理系統&#xff0c;服務于企業品牌信息化建設&#xff0c;也適應用個人、門戶網站建設…

你讓,勛爵? 使用Jenkins聲明性管道的Docker中的Docker

Resources. When they are unlimited they are not important. But when theyre limited, boy do you have challenges! 資源。 當它們不受限制時&#xff0c;它們并不重要。 但是&#xff0c;當他們受到限制時&#xff0c;男孩你有挑戰&#xff01; Recently, my team has fa…

翻譯(九)——Clustered Indexes: Stairway to SQL Server Indexes Level 3

原文鏈接&#xff1a;www.sqlservercentral.com/articles/StairwaySeries/72351/ Clustered Indexes: Stairway to SQL Server Indexes Level 3 By David Durant, 2013/01/25 (first published: 2011/06/22) The Series 本文是階梯系列的一部分&#xff1a;SQL Server索引的階梯…

power bi 中計算_Power BI中的期間比較

power bi 中計算Just recently, I’ve come across a question on the LinkedIn platform, if it’s possible to create the following visualization in Power BI:就在最近&#xff0c;我是否在LinkedIn平臺上遇到了一個問題&#xff0c;是否有可能在Power BI中創建以下可視化…

-Hive-

Hive定義 Hive 是一種數據倉庫技術&#xff0c;用于查詢和管理存儲在分布式環境下的大數據集。構建于Hadoop的HDFS和MapReduce上&#xff0c;用于管理和查詢分析結構化/非結構化數據的數據倉庫; 使用HQL&#xff08;類SQL語句&#xff09;作為查詢接口&#xff1b;使用HDFS作…

CentOS 7 安裝 JDK

2019獨角獸企業重金招聘Python工程師標準>>> 1、下載oracle jdk 下載地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html 選擇同一協議&#xff0c;下載rpm格式版本jdk&#xff0c;或tar.gz格式jdk。 2、卸載本機openjdk 2.1、查…

javascript 布爾_JavaScript布爾說明-如何在JavaScript中使用布爾

javascript 布爾布爾型 (Boolean) Booleans are a primitive datatype commonly used in computer programming languages. By definition, a boolean has two possible values: true or false.布爾值是計算機編程語言中常用的原始數據類型。 根據定義&#xff0c;布爾值有兩個…

如何進行數據分析統計_對您不了解的數據集進行統計分析

如何進行數據分析統計Recently, I took the opportunity to work on a competition held by Wells Fargo (Mindsumo). The dataset provided was just a bunch of numbers in various columns with no indication of what the data might be. I always thought that the analys…

經典:區間dp-合并石子

題目鏈接 &#xff1a;http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid737 這個動態規劃的思是&#xff0c;要得出合并n堆石子的最優答案可以從小到大枚舉所有石子合并的最優情況&#xff0c;例如要合并5堆石子就可以從&#xff0c;最優的23和14中得到最佳的答案。從兩堆…

常見排序算法_解釋的算法-它們是什么以及常見的排序算法

常見排序算法In its most basic form, an algorithm is a set of detailed step-by-step instructions to complete a task. For example, an algorithm to make coffee in a french press would be:在最基本的形式中&#xff0c;算法是一組完成任務的詳細分步說明。 例如&…

020-Spring Boot 監控和度量

一、概述 通過配置使用actuator查看監控和度量信息 二、使用 2.1、建立web項目&#xff0c;增加pom <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 啟動項目&a…