您的位置 首页 kreess

大數據學習(二)Hadoop

簡言此文記錄學習筆記,如有侵權,請聯系本人刪除。Hadoop生態圈是以Hadoop為中心的技術生態系統1 Hadoop介紹1.1 Hadoop是什麼The Apache™

簡言

此文記錄學習筆記,如有侵權,請聯系本人刪除。

Hadoop生態圈是以Hadoop為中心的技術生態系統

1 Hadoop介紹

1.1 Hadoop是什麼

The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing。

Hadoop是一個開源的軟件,並且是可靠性的(reliable)、可擴展性的(scalable)、分佈式計算的(distributed computing)軟件。

  • Hadoop是一個框架,可以允許分佈式處理大數據集(big data sets),而且這個數據集是橫跨在集群的機器上的(clusters of computers)。也就是說數據可以分開地存儲在集群中的每個機器(節點)上,並且可以跨節點進行處理計算,它使用的是一種簡單的編程模型(using simple programming models)。
  • Hadoop被設計成可以從單個服務器(single servers)擴展到數千臺機器的的集群上,每臺機器都提供本地的存儲和計算服務。也就是說當數據量小的時候,可以使用少一點的機器的集群,而面對一個大量數據的情況時,現有的機器不足以支撐存儲運算時,隻需要再添加一些機器到集群中,就能解決問題。
  • Hadoop並不是依賴硬件來提供高可用性,而是它自己被設計成可以檢測和處理應用層的故障。在集群中每臺機器上提供高可靠性服務,而這些機器可能會傾向於出現故障。

1.2 Hadoop能做什麼

  • Hadoop可以搭建大型數據倉庫,PB級數據的存儲、處理、分析、統計等業務。
  • 商業智能(BI)、可視化報表的產生等等。
  • 數據挖掘,從大量的數據中挖掘出有價值的結論等等。

1.3 Hadoop包括什麼

Hadoop框架包含以下模塊:

  • Hadoop Common:提供支撐其他模塊的通用工具。
  • Hadoop HDFS:為應用程序訪問提供高吞吐量的分佈式文件系統。
  • Hadoop YARN:提供任務調度服務和集群資源管理的框架。
  • Hadoop MapReduce:可以並行處理大數據集的編程計算模型。
  • Hadoop Ozone:提供對象存儲的功能。
  • Hadoop Submarine :提供機器學習引擎。

2 HDFS數據存儲原理

2.1 HDFS概述

HDFS,全稱Hadoop Distributed File System,是一個分佈式文件系統。

分佈式文件系統(Distributed File System)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。分佈式文件系統的設計基於客戶機/服務器模式。一個典型的網絡可能包括多個供多用戶訪問的服務器。

HDFS是一個設計可以運行在廉價硬件上的分佈式文件系統。HDFS是一個高容錯和可部署(deployed)在廉價機器上的系統,提供瞭對應用程序數據的高吞吐量訪問,適用於具有大型數據集的應用程序。

2.2 HDFS特點

  • 商用硬件。硬件故障是常態,而不是異常。整個HDFS系統將由數百或數千個存儲著文件數據片段的服務器組成。實際上它裡面有非常巨大的組成部分,每一個組成部分都很可能出現故障,這就意味著HDFS裡的總是有一些部件是失效的,因此,故障的檢測和自動快速恢復是HDFS一個很核心的設計目標。
  • 流數據訪問。運行在HDFS之上的應用程序必須流式地訪問它們的數據集,它不是運行在普通文件系統之上的普通程序。HDFS被設計成適合批量處理的,而不是用戶交互式的。重點是在數據吞吐量,而不是數據訪問的反應時間,POSIX的很多硬性需求對於HDFS應用都是非必須的,去掉POSIX一小部分關鍵語義可以獲得更好的數據吞吐率。
  • 大型數據集。運行在HDFS之上的程序有很大量的數據集。典型的HDFS文件大小是GB到TB的級別。所以,HDFS被調整成支持大文件。它應該提供很高的聚合數據帶寬,一個集群中支持數百個節點,一個集群中還應該支持千萬級別的文件。
  • 簡單一致模型。HDFS應用需要一個一次寫入多次讀取的文件訪問模型。一個文件一旦創建,寫入和關閉都不需要改變除瞭追加和截斷(truncate)。支持在文件的末端進行追加數據而不支持在文件的任意位置進行修改。這個假設簡化瞭數據一致性問題和支持高吞吐量的訪問。一個Map/Reduce任務或者web爬蟲(crawler)完美匹配瞭這個模型。
  • 移動計算比移動數據便宜。在靠近計算數據所存儲的位置來進行計算是最理想的狀態,尤其是在數據集特別巨大的時候。這樣消除瞭網絡的擁堵,提高瞭系統的整體吞吐量。一個假定就是遷移計算到離數據更近的位置比將數據移動到程序運行更近的位置要更好。HDFS提供瞭接口,來讓程序將自己移動到離數據存儲更近的位置。
  • 在異構硬件和軟件平臺上的可移植性。HDFS被設計成可以簡便地實現平臺間的遷移,這將推動需要大數據集的應用更廣泛地采用HDFS作為平臺。

2.3 HDFS架構

  • NameNode:管理節點,維護著文件系統樹及整個樹內的所有文件和目錄(元數據),同時負責客戶端請求。
  • DataNode:文件系統的工作節點,根據需要存儲和檢索數據塊,並且定期向NameNode發送他們所存儲的塊的列表。
  • Blocks:HDFS中的存儲單元,默認為128M,通常有多個備份,默認為3。

2.4 HDFS數據讀寫

2.5 HDFS NameNode工作機制

元數據有三種形式:內存、EditsLog、FsImage。

  • 內存中保存的是最完整最新的元數據。
  • EditsLog保存HDFS自最新的元數據檢查點後的元數據變化的記錄。
  • FsImage保存最新的元數據檢查點。

Checkpoint(檢查點)指的是在NameNode啟動時候,會先將fsimage中的文件系統元數據信息加載到內存,然後根據eidts中的記錄將內存中的元數據同步至最新狀態(這裡讀的是journalnode中的editlog),將這個新版本的 FsImage 從內存中保存到本地磁盤上,然後刪除舊的 Editlog。

fsimage存放上次checkpoint生成的文件系統元數據,Edits存放文件系統操作日志。checkpoint的過程,就是合並fsimage和Edits文件,然後生成最新的fsimage的過程。

2.6 HDFS副本存放

機架感知策略:

  • 第一個復本放在運行客戶端的節點上(如果客戶端運行在集群之外,則在避免挑選存儲太滿或太忙的節點的情況下隨機選擇一個節點)。
  • 第二個復本放在與第一個不同且隨機選擇的機架的節點上。
  • 第三個復本與第二個復本放在同一個機架上,且隨機選擇另一個節點。
  • 其它復本放在集群中隨機選擇的節點中,盡量避免在同一個機架上放太多復本。

3 MapReduce編程模型框架

3.1 MapReduce概述

  • 定義:是谷歌開源的一種大數據並行計算編程模型,它降低瞭並行計算應用開發的門檻。
  • 工作原理:利用一個輸入key/value pair集合來產生一個輸出的key/value pair集合。
  • 運行機制:以一種可靠的、容錯的方式,在大型的商用硬件集群(數千個節點)上並行處理大量數據(多為TB級別的數據集)。
  • 優點:簡單容易使用、擴展性強、高容錯性、可離線計算 ​​PB​​ 量級的數據。
  • 缺點:實時計算、流式計算、有向圖計算支持性不高。

3.2 工作原理

分而治之。采用分佈式並行計算,將計算任務進行拆分,由主節點下的各個子節點共同完成,最後匯總各子節點的計算結果,得出最終計算結果。

MapReduce任務通常將輸入數據集分割成獨立的塊,由map任務以完全並行的方式處理。框架對map任務映射的輸出進行排序,然後將這些輸出輸入到reduce任務中。

通常,作業的輸入和輸出都存儲在文件系統中,框架負責調度任務,監視任務,並重新執行失敗的任務。

MapReduce框架隻對<key,value>對進行操作,也就是說,框架將作業的輸入視為一組<key,value>對,並生成一組<key,value>對作為作業的輸出,可以認為是不同類型的。

3.3 MapReduce執行步驟

  • 第一階段是把輸入文件按照一定的標準分片(InputSplit),每個輸入片的大小是固定的。默認情況下,輸入片(InputSplit)的大小與數據塊(Block)的大小是相同的。如果數據塊(Block)的大小是默認值64MB,輸入文件有兩個,一個是32MB,一個是72MB。那麼小的文件是一個輸入片,大文件會分為兩個數據塊,那麼是兩個輸入片。一共產生三個輸入片。每一個輸入片由一個Mapper進程處理。
  • 第二階段是對輸入片中的記錄按照一定的規則解析成鍵值對。有個默認規則是把每一行文本內容解析成鍵值對。“鍵”是每一行的起始位置(單位是字節),“值”是本行的文本內容
  • 第三階段是調用Mapper類中的map方法。第二階段中解析出來的每一個鍵值對,調用一次map方法。如果有1000個鍵值對,就會調用1000次map方法。每一次調用map方法會輸出零個或者多個鍵值對。
  • 第四階段是按照一定的規則對第三階段輸出的鍵值對進行分區。分區是基於鍵進行的。比如我們的鍵表示省份(如北京、上海、山東等),那麼就可以按照不同省份進行分區,同一個省份的鍵值對劃分到一個區中。默認是隻有一個區。分區的數量就是Reducer任務運行的數量。默認隻有一個Reducer任務。
  • 第五階段是對每個分區中的鍵值對進行排序。首先,按照鍵進行排序,對於鍵相同的鍵值對,按照值進行排序。比如三個鍵值對<2,2>、<1,3>、<2,1>,鍵和值分別是整數。那麼排序後的結果是<1,3>、<2,1>、<2,2>。如果有第六階段,那麼進入第六階段。
  • 第六階段是對數據進行歸約處理,也就是reduce處理,通常情況下的Combine過程,鍵相等的鍵值對會調用一次reduce方法,經過這一階段,數據量會減少,歸約後的數據輸出到本地的linux文件中。

在MapReduec任務調度模型中,主要包含以下幾個角色:

  • JobClient:接收客戶端提交的程序jar包,並進行一系列的操作,具體會在下面進行詳細分析。
  • JobTracker:負責接收JobTracker分配的作業,將Task分配到各個節點上去運行,並提供諸如監控工作節點狀態及任務進度等管理功能,一個MapReduce集群隻有一個JobTracker。
  • TaskTracker:負責監控任務的執行情況,並通過心跳連接周期性地向jobtracker匯報任務進度,資源使用量等。每臺執行任務的節點都會有一個TaskTracker ,其使用“slot”等量劃分本節點上的資源量。“slot”代表計算資源(CPU、內存等)。一個Task 獲取到一個slot 後才有機會運行,slot 分為Map slot和Reduce slot 兩種,分別供MapTask 和Reduce Task 使用。TaskTracker通過slot 數目(可配置參數)限定Task 的並發度。
  • HDFS:用於提供數據存儲服務和和作業間的文件共享。

4 YARN資源調度管理

4.1 概述

YARN全稱是Yet Another Resource Negotiatord。通用的資源管理系統,要申請資源統一經過YARN進行申請。為上層應用提供統一的資源管理和調度。不同計算框架可以共享同一個HDFS集群上的數據,享受整體上的資源調度:Spark on YARN 、 MapReduce on YAEN 、 Storm on YARN …與其他計算框架共享集群資源,按資源需要分配,進而提高集群資源的利用率。

4.2 架構

Yarn 采用傳統的 master-slave 架構模式,其主要由 4 種組件組成,它們的主要功能如下:

  • ResourceManager(RM):全局資源管理器,負責整個系統的資源管理和分配;
  • ApplicationMaster(AM):負責應用程序(Application)的管理;
  • NodeManager(NM):負責 slave 節點的資源管理和使用;
  • Container(容器):對任務運行環境的一個抽象。

4.3 執行流程

  1. 客戶端向RM中提交程序 。
  2. RM向NM中分配一個container,並在該container中啟動AM 。
  3. AM向RM註冊,這樣用戶可以直接通過RM査看應用程序的運行狀態(然後它將為各個任務申請資源,並監控它的運行狀態,直到運行結束) 。
  4. AM采用輪詢的方式通過RPC協議向RM申請和領取資源,資源的協調通過異步完成。
  5. AM申請到資源後,便與對應的NM通信,要求它啟動任務 。
  6. NM為任務設置好運行環境(包括環境變量、JAR包、二進制程序等)後,將任務啟動命令寫到一個腳本中,並通過運行該腳本啟動任務 。
  7. 各個任務通過某個RPC協議向AM匯報自己的狀態和進度,以讓AM隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啟動任務 。
  8. 應用程序運行完成後,AM向RM註銷並關閉自己。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部