我眼中的大數據(三)——MapReduce

来源:https://www.cnblogs.com/hhhnicvscs/archive/2022/09/23/16722787.html
-Advertisement-
Play Games

​ 這次來聊聊Hadoop中使用廣泛的分散式計算方案——MapReduce。MapReduce是一種編程模型,還是一個分散式計算框架。 MapReduce作為一種編程模型功能強大,使用簡單。運算內容不只是常見的數據運算,幾乎大數據中常見的計算需求都可以通過它來實現。使用的時候僅僅需要通過實現Map和 ...


這次來聊聊Hadoop中使用廣泛的分散式計算方案——MapReduce。MapReduce是一種編程模型,還是一個分散式計算框架

MapReduce作為一種編程模型功能強大,使用簡單。運算內容不只是常見的數據運算,幾乎大數據中常見的計算需求都可以通過它來實現。使用的時候僅僅需要通過實現Map和Reduce介面的方式來完成計算邏輯,其中Map的輸入是一對<Key, Value>,經過計算後輸出一對<Key, Value>;然後將相同Key合併,形成<Key, Value>集合;再將這個集合輸入Reduce。

下麵,就以WordCount為例,熟悉一下MapReduce:

WordCount是為了統計文本中不用辭彙出現的次數。如果統計一篇文本的內容,只需要寫一個程式將文本數據讀入記憶體,創建一個字典,記錄每個詞出現的次數就可以了。但是如果想統計互聯網中網頁的辭彙數量,就需要用MapReduce來解決。

public class WordCount {

  public static class TokenizerMapper
       extends Mapper<Object, Text, Text, IntWritable>{

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
      StringTokenizer itr = new StringTokenizer(value.toString());
      while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
      }
    }
  }

  public static class IntSumReducer
       extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values,
                       Context context
                       ) throws IOException, InterruptedException {
      int sum = 0;
      for (IntWritable val : values) {
        sum += val.get();
      }
      result.set(sum);
      context.write(key, result);
    }
  }
}

從上面代碼不難發現,MapReduce核心是一個map函數和一個reduce函數。map函數的輸入主要是一個<Key, Value>對,在這個例子里,Value是要統計的所有文本中的一行數據,Key在一般計算中都不會用到。map函數將文本中的單詞提取出來,針對每個單詞輸出一個<word, 1>。MapReduce計算框架會將這些<word , 1>,合併成<word , <1,1,1,1,1,1,1…>>,然後傳給reduce函數。reduce函數將這個集合里的1求和,再將word和這個sum組成一個<Key, Value>,也就是<word, sum>輸出。apReduce框架為每個數據塊分配一個map函數去計算,從而實現大數據的分散式計算。

MapReduce在運行過程中有三個關鍵進程,分別是Driver進程、JobTracker進程、TaskTracker進程。

1.Driver進程:是啟動MapReduce的主入口,主要是實現Map和Reduce類、輸入輸出文件路徑等,並提交作業給Hadoop集群,也就是下麵的JobTracker進程。

2.JobTracker進程:根據輸入數據數量,命令TaskTracker進程啟動相應數量的Map和Reduce進程,並管理整個生命周期的任務調度和監控。

3.TaskTracker進程:負責啟動和管理Map以及Reduce進程。因為需要每個數據塊都有對應的map函數,TaskTracker進程通常和HDFS的DataNode進程啟動在同一個伺服器。

JobTracker進程和TaskTracker進程是主從關係,同一時間提供服務的主伺服器通常只有一臺,從伺服器有多台,所有的從伺服器聽從主伺服器的控制和調度安排。主伺服器負責為應用程式分配伺服器資源以及作業執行的調度,而具體的計算操作則在從伺服器上完成。MapReduce的主伺服器就是JobTracker,從伺服器就是TaskTracker。

 

1.JobClient將包含MapReduce的JAR包存儲在HDFS中,將來這些JAR包會分發給Hadoop集群中的伺服器執行計算。

2.向JobTracker提交Job。

3.JobTracker根據調度策略創建JobInProcess樹,每個作業都會有一個自己的JobInProcess樹。

4.JobInProcess根據輸入數據的塊數和配置中的Reduce數目創建相應數量的TaskInProcess。

5.TaskTracker和JobTracker進行心跳通信。

6.如果TaskTracker有空閑的計算資源,JobTracker就會給它分配任務。

7.TaskTracker收到任務類型(是Map還是Reduce)和任務參數(JAR包路徑、輸入數據文件路徑),啟動相應的進程。

8.Map或者Reduce進程啟動後,檢查本地是否有要執行任務的JAR包文件,如果沒有,就去HDFS上下載,然後載入Map或者Reduce代碼開始執行。

9.如果是Map進程,從HDFS讀取數據;如果是Reduce進程,將結果寫出到HDFS。

我們僅僅是編寫一個map函數和一個reduce函數就可以了,不用關心這兩個函數是如何被分佈啟動到集群上的,也不用關心數據塊又是如何分配給計算任務的。

MapReduce框架要將一個相對簡單的程式,在分散式的大規模伺服器集群上並行執行起來卻並不簡單。理解MapReduce作業的啟動和運行機制,對理解大數據的核心原理,做到真正意義上把握大數據作用巨大。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在上一篇:UWP/WinUI3 PixelShaderEffect 實現ThresholdEffect 濾鏡。 - 吃飯/睡覺 - 博客園 (cnblogs.com) 已經價紹瞭如何編寫hsls,編譯,和使用 PixelShaderEffect 來實現自定義濾鏡效果了,那麼本編將介紹如何編寫一個 “ ...
  • 在上一個文章中,傳送門,給大家介紹了怎麼在配置文件中使用 Kestrel 部署 Https,正好今天有小伙伴穩問到:可以通過代碼的方式實現 Kestrel 的 Https 的部署嗎?答案是肯定的,我們這次一樣去不是多個功能變數名稱。 在使用代碼實現中,我是主要使用到 ListenOptions.UseHtt ...
  • 1. 融合效果 在 CSS 中有一種實現融合效果的技巧,使用模糊濾鏡(blur)疊加對比度濾鏡(contrast)使兩個接近的元素看上去“粘”在一起,如下圖所示: 博客園的 ChokCoco 就用這個技巧實現了很多不同的玩法並寫了很多文章,例如這篇: 你所不知道的 CSS 濾鏡技巧與細節 我一直對這 ...
  • zookeeper ##協調機制 選舉leader 多個flower 客戶端 伺服器 ##特點 半數以上 數據一致性 在有限時間範圍內,執行順序同步於發送順序 文件結構類unix 樹狀每一個結點既是文件夾也可以是值。記為znode ? 本質上zookeeper 是文件系統+通知機制 ##啟動zook ...
  • 1.加拿大創新、科學和經濟發展部 (ISED) 於 2022 年 9 月 9 日發佈了第 2022-CEB001 號通知。 該通知包括關於無線電標準規範 RSS-195 “無線通信服務 (WCS) 設備在 2305-2320 MHz 和 2345-2360 MHz 頻段”第 2 版的指南,旨在重申 ...
  • 安裝MySQL版本為:8.0.16 1、首次安裝,下載命令: wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz 2、解壓 tar xvJf mysql-8.0.2 ...
  • 摘要:先哲說,萬物莫不相異,而在今天,萬物也可相通。 本文分享自華為雲社區《打破聯接壁壘,華為雲IoT到底強在哪?》,作者:華為IoT雲服務。 “凡物莫不相異”, 是十七世紀哲學家萊布尼茨提出的著名論斷。這句至理名言,卻為難了今天的物聯網從業者們。 在物聯網領域內,設備的差異表現為協議不同和數據模型 ...
  • 1 DBeaver介紹 DBeaver是一個通用的資料庫管理工具和 SQL 客戶端,支持多種相容 JDBC 的資料庫。DBeaver 提供一個圖形界面用來查看資料庫結構、執行SQL查詢和腳本,瀏覽和導出數據,處理BLOB/CLOB 數據,修改資料庫結構等。 2 安裝DBeaver 下載地址:http ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...