主頁 > 軟體設計 > 《離線和實時大資料開發實戰》(三)Hadoop原理實戰

《離線和實時大資料開發實戰》(三)Hadoop原理實戰

2020-10-10 16:25:24 軟體設計

文章目錄

    • 前言
    • 一、HDFS 和 MapReduce 優缺點分析
      • 1.1 HDFS
      • 1.2 MapReduce
    • 二、HDFS 和 MapReduce 基本架構
    • 三、MapReduce 內部原理實踐
    • 四、小結

前言

接著前兩章 構建大資料開發知識體系圖譜 和 大資料平臺架構技術概覽 ,本次繼續分享邦中老師的《離線和實時大資料開發實戰》讀書筆記 ,講講大資料開發的主戰場 —— 離線資料開發,離線資料技術已經有了十多年的發展,已經 比較穩定,形成了 Hadoop、 MapReduce 和 Hive 為事實標準的離線資料處理技術,離線資料平臺是整個資料平臺的根本和基礎,也是目前資料平臺的主站場,

一、HDFS 和 MapReduce 優缺點分析

1.1 HDFS

HDFS 文全稱是 Hadoop Distributed File System ,即 Hadoop 分布式檔案系統,它是Hadoop 的核心子專案,實際上, Hadoop 中有一個綜合性的檔案系統抽象,它提供了檔案系 現的各類介面,而 HDFS 只是這個抽象檔案系統的一種實作,但 HDFS 是各種抽象介面實作中應用最為廣泛和最廣為人知的一個,

HDFS 是基于流式資料模式訪問和處理超大檔案的需求而開發的,其主要特點如下:


當然,HDFS 的上述種種特點非常適合于大資料量的批處理,但是對于一些特定問題不但沒有優勢, 而且有一定的局限性,主要表現在如下幾個方面:

  1. 不適合低延遲資料訪問

對于那些有低延時要求的應用程式, HBase 是一個更好的選擇,尤其適用于對海量資料集進行訪問并要求毫秒級回應時間的情況,

  1. 無法高效存盤大量小檔案

要想讓 HDFS 處理好小檔案,有不少方法,例如,利用 SequenceFile、MapFile、Har 等方式歸檔小檔案,這個方法的原理就是把小檔案歸檔起來管理, HBase 就是基于此的對于這種方法,如果想找回原來的小檔案內容,就必須得知道與歸檔檔案的映射關系,此外,也可以橫向擴展,一個 NameNode不夠,可以多 Master 設計,將NameNode 一個集群代替, Alibaba DFS 的設計,就是多 Master 設計,它把 Metadata 的映射存盤和管理分開了,由多個 Metadata 存盤節點和一個查詢 Master 節點組成,

  1. 不支持多用戶寫入和隨機檔案修改

在 HDFS 的一個檔案中只有一個寫入者,而且寫操作只能在檔案末尾完成,即只能執行追加操作,

1.2 MapReduce

MapReduce 是 Google 公司的核心計算模型,它將運行于大規模集群上的復雜并行計算程序高度地抽象為兩個函式: Map 和 Reduce, Hadoop 中的 MapReduce 是一個使用簡單的軟體框架,基于它寫出來的應用程式能夠運行在由上千個商用機器組成的大型集群上,并能可靠容錯地并行處理 TB 級別的資料集,

MapReduce 目前非常流行,尤其在互聯網公司中 MapReduce 之所以如此受歡迎,是因為它有如下的特點:

在這里插入圖片描述

二、HDFS 和 MapReduce 基本架構

HDFS 和 MapReduce 是 Hadoop 的兩大核心,它們的分工也非常明確, HDFS 負責分布式存盤,而 MapReduce 負責分布式計算,

首先介紹 HDFS 的體系結構, HDFS 采用了主從( Master/Slave )的結構模型,一個HDFS 集群是由一個 NameNode 和若干個 DataNode 組成的,其中 NameNode 作為主服務器,管理檔案系統的命名空間(即檔案有幾塊,分別存盤在哪個節點上等)和客戶端對檔案的訪問操作;集群中的 DataNode 管理存盤的資料, HDFS 允許用戶以檔案的形式存盤資料,

從內部來看,檔案被分為若干資料塊,而且這若干個資料塊存放在一組 DataNode上,NameNode 執行檔案系統的命名空間操作,比如打開、關閉、重命名檔案或目錄等,它也負責資料塊到具體 DataNode 的映射 ,DataNode 負責處理檔案系統客戶端的檔案讀寫請求,并在 NameNode 的統一調度下進行資料塊的創建、洗掉和復制作業,

HDFS 的體系結構
NameNode 和 DataNode 都被設計成可以在普通商用計算機上運行,而且這些計算機通常運行的是 Linux作業系統 ,HDFS 采用 Java 語言開發, 因此任何支持 Java 的機器都可以部署 NameNode 和 DataNode ,

一個典型的部署場景是集群中的一個機器運行一個NameNode 實體,其他機器分別運行一個 DataNode 實體,

MapReduce 也是采用 Master/Slave 的主從架構,其架構圖如圖:

MapReduce 的架構

MapReduce 包含4個組成部分,分別為 Client、 JobTracker、TaskTracker 和 Task,

三、MapReduce 內部原理實踐

從上述 MapReduce 架構可以看出, MapReduce 作業執行主要由 JobTracker 和 Task-Tracker 負責完成,

  • 客戶端撰寫好的 MapReduce 程式井配置好的 MapReduce 作業是一個 Job, Job 被提交給 JobTracker ,JobTracker 會給該 Job 一個新的 ID 值,接著檢查該 Job 指定的輸出目錄是否存在、輸入檔案是否存在, 如果不存在,則拋出錯誤,

  • 同時, JobTracker 會根據輸入檔案計算輸入分片 ( input split ),這些都檢查通過后, JobTracker 就會配置 Job 需要的資源并分配資源,然后 JobTracker 就會初始化作業,也就是將 Job 放入一個內部的佇列,讓配置好的作業調度器能調度到這個作業,作業調度器會初始化這個 Job ,初始化就是創建一個正在運行的 Job 物件(封裝任務和記錄資訊),以便 JobTracker 跟蹤 Job 的狀態和行程,

  • Job 被作業調度器調度時,作業調度器會獲取輸入分片資訊,每個分片創建一個 Map 任務,并根據 TaskTracker 的忙閑情況和空閑資源等分配 Map 任務和 Reduce 任務到 TaskTraker ,同時通過心跳機制也可以監控到 TaskTracker 的狀態和進度 ,也能計算出整個Job 的狀態和進度,

  • 當JobTracker 獲得了最后一個完成指定任務的 TaskTracker 操作成功的通知時候, Jo Tracker 會把整個 Job 狀態置為成功,然后當查詢 Job 運行狀態時(注意:這個是異步操作),客戶端會查到 Job 完成的通知 ,

  • 如果 Job 中途失敗, MapReduce 會有相應的機制處理 ,一般而言,如果不是程式員程式本身有 bug ,MapReduce 錯誤處理機制都能保證提交的 Job 能正常完成,

那么, MapReduce 到底是如何運行的呢?

我們按照時間順序, MapReduce 任務執行包括:

輸入分片 Map 、Shuffle 和 Reduce 等階段,一個階段的輸出正好是下一階段的輸入,

MapReduce 執行階段和流程圖
上圖從整體角度很好地表示了 MapReduce 的大致階段劃分和概貌,

結合單詞計數實體的 MapReduce 執行階段和流程圖
而具體各階段的作用,可參考如下:
在這里插入圖片描述

四、小結

這一章節,主要還是從資料處理角度集中介紹了 Hadoop 的相關知識,Hadoop 的 HDFS 和 MapReduce 是離線資料處理的底層技術,實際開發中大家還是很少通過撰寫 MapReduce 程式來處理大資料,相反大家主要用基 MapReduce 的高級別抽象 Hive ,效率更高,而且更容易使用,這也是下面會重點和大家講的離線資料處理中的主要技術—— Hive,

云 祁 CSDN認證博客專家 Flink Spark 資料中臺
我是「云祁」,一枚熱愛技術、會寫詩的大資料開發猿,專注資料中臺和 Flink / Spark / Hive 等大資料技術,歡迎一起交流學習,生命不是要超越別人,而是要超越自己!加油 (? ?_?)?

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/166388.html

標籤:其他

上一篇:云計算運維之Shell條件陳述句(if 陳述句+case陳述句及實體詳解)

下一篇:2.1 Python運行環境

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more