Hadoop大數據開發基礎系列:一、初識Hadoop

目錄結構

1.Hadoop概述

1.1 Hadoop簡介

1.2 Hadoop發展史

1.3 Hadoop特點

2.Hadoop核心

2.1 分佈式文件系統——HDFS

2.2 分佈式計算框架——MapReduce

2.3 集群資源管理器——YARN

3.Hadoop生態系統

4.Hadoop應用場景

5.小結


一、Hadoop介紹

1.Hadoop概述

兩大核心:HDFS和MapReduce

用於資源與任務調度的框架:YARN

1.1 Hadoop簡介

Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。用戶可以在不瞭解分佈式底層細節的情況下,開發分佈式程序。充分利用集群的威力進行高速運算和存儲。它的目的是從單一的服務器擴展到成千上萬的機器,將集群部署在多臺機器,每個機器提供本地計算和存儲,並且將存儲的數據備份在多個節點,由此提高集群的可用性,而不是通過硬件的提升,當一臺機器宕機時,其他節點仍可以提供備份數據和計算服務,Hadoop框架最核心的設計是HDFS和MapReduce。

1.2 Hadoop發展史(轉自百度百科)

Hadoop原本來自於谷歌一款名為MapReduce的編程模型包。谷歌的MapReduce框架可以把一個應用程序分解為許多並行計算指令,跨大量的計算節點運行非常巨大的數據集。使用該框架的一個典型例子就是在網絡數據上運行的搜索算法。Hadoop 最初只與網頁索引有關,迅速發展成為分析大數據的領先平臺。

目前有很多公司開始提供基於Hadoop的商業軟件、支持、服務以及培訓。Cloudera是一家美國的企業軟件公司,該公司在2008年開始提供基於Hadoop的軟件和服務。GoGrid是一家雲計算基礎設施公司,在2012年,該公司與Cloudera合作加速了企業採納基於Hadoop應用的步伐。Dataguise公司是一家數據安全公司,同樣在2012年該公司推出了一款針對Hadoop的數據保護和風險評估的軟件。

1.3 Hadoop的特點

Hadoop是一個能夠讓用戶輕鬆架構和使用的分佈式計算平臺。用戶可以輕鬆地在Hadoop上開發和運行處理海量數據的應用程序。其優點主要有以下幾個:

(1)高可靠性:因為它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新分佈處理。

(2)高擴展性:集群內可以很容易地進行節點擴展,擴大集群。

(3)高效性:Hadoop是在節點之間動態地移動數據,在數據所在節點進行併發處理,並保證各個節點的動態平衡,因此處理速的非常快。

(4)高容錯性:HDFS在存儲文件時會在多個節點或者多臺機器上存儲文件的備份副本,保證程序順利運行。如果啟動的任務失敗,Hadoop會重新運行該任務或啟用其他任務來完成這個任務沒有完成的部分。

(5)低成本:Hadoop是開源的。

(6)可構建在廉價機器上,Hadoop的基本框架是用java編寫的。

2.Hadoop核心

2.1 分佈式文件系統——HDFS(Hadoop Distributed File System)

2.1.1 HDFS架構及簡介

HDFS是以分佈式進行存儲的文件系統,主要負責集群數據的存儲和讀取。HDFS是一個主/從(master/slave)體系結構的分佈式文件系統。HDFS支持傳統的層次型文件組織結構,用戶或者應用程序可以創建目錄,然後將文件保存在這些目錄裡,可以通過文件路徑對文件執行創建、讀取、更新、刪除等操作。但是由於分佈式存儲的性質,他有和傳統的文件系統有明顯的區別。

HDFS基本架構圖:

Hadoop大數據開發基礎系列:一、初識Hadoop

在這裡還是要推薦下我自己建的大數據學習交流群:943791324,群裡都是學大數據開發的,如果你正在學習大數據 ,小編歡迎你加入,大家都是軟件開發黨,不定期分享乾貨(只有大數據軟件開發相關的),包括我自己整理的一份最新的大數據進階資料和高級開發教程,歡迎進階中和進想深入大數據的小夥伴加入。


HDFS文件系統主要包括一個NameNode、一個Secondary NameNode和多個DataNode。

(1)元數據(metadata)

元數據不是具體的文件內容,有三部分重要信息:①文件和目錄自身的屬性信息,如文件名、目錄名、父目錄信息、文件大小、創建時間、修改時間等;②記錄文件內容存儲的相關信息,例如文件分塊情況、副本個數、每個副本所在的DataNode信息等;③用來記錄HDFS中所有的DataNode的信息,用於管理DataNode

(2)NameNode

Hadoop大數據開發基礎系列:一、初識Hadoop

NameNode用於存儲元數據以及處理客戶端發出的請求。在NameNode中存放元信息的文件是fsimage文件。在系統運行期間,所有對元數據的操作都會保存在內存中,並且被持久化存儲在另一個文件edits(日誌)中,當NameNode啟動時,fsimage會被加載到內存,然後對內存裡的數據執行edits所記錄的操作,以確保內存所保留的數據處於最新狀態。

(3)Secondary NameNode

Hadoop大數據開發基礎系列:一、初識Hadoop

Secondary NameNode用於備份NameNode的數據,週期性將edits文件合併到fsimage文件並在本地本分,將新的fsimage文件存儲到NameNode,取代原來的fsimage,刪除edits文件。創建一個新的edits繼續存儲文件的修改操作和狀態。

(4)DataNode

DataNode是真正存儲數據的地方。在DataNode中,文件以數據塊的形式進行存儲。當文件傳到HDFS端以128MB的數據塊將文件進行切割,將每個數據塊存到不同的或者相同的DataNode並且備份副本,一般默認3個,NameNode會負責記錄文件的分塊信息,確保在讀取文件時可以找到並整合整個塊。

(5)數據塊(block)

文件在上傳到HDFS時根據系統默認文件塊大小把文件分成一個個數據塊。Hadoop 2.x 默認128MB為一個數據塊,比如存儲大小為129MB的文件,則被分為兩個塊來存儲。數據塊會被存儲到各個節點,每個數據塊都會備份副本。

2.1.2 HDFS分佈式原理

什麼是分佈式系統?分佈式系統會劃分成多個子系統或模塊,各自運行在不同的機器上,子系統或模塊之間通過網絡通信進行協作,實現最終的整體功能。利用多個節點共同協作完成一項或多項具體業務功能的系統就是分佈式系統。

分佈式文件系統是分佈式系統的一個子集,其解決的問題就是數據存儲。換句話說,它是橫跨在多臺計算機上的存儲系統。存儲在分佈式文件上的數據自動分佈在不同的節點上。

HDFS作為分佈式文件系統,主要體現在以下三個方面:

(1)HDFS並不是一個單機文件系統,它是分佈在多個集群節點上的文件系統。節點之間通過網絡通信進行協作,提供多個節點的文件信息,讓每個用戶都可以看到文件系統的文件。讓多臺機器上的多用戶分享文件和存儲空間。

(2)文件存儲時被分佈在多個節點上,這裡涉及一個數據塊的概念,數據存儲不是按一個文件存儲的,而是把一個文件分成一個或多個數據塊存儲。數據塊存儲時並不是都存儲在一個節點上,而是被分佈存儲在各個節點上,並且數據塊會在其他節點上存儲副本。

(3)數據從多個節點讀取。讀取一個文件時,從多個節點中找到該文件的數據塊,分佈讀取所有數據塊,直到最後一個數據塊讀取完畢。

2.1.3 HDFS宕機處理

數據存儲在文件系統中,如果某個節點宕機了,就很容易造成數據流失,HDFS針對這個問題提供了保護措施:

(1)冗餘備份

數據存儲過程中對每個數據塊都做了冗餘處理,副本個數可以自行設置。

(2)副本存放

使用的策略:以dfs.replication為例,在同一個機器的兩個節點上各備份一個副本,然後在另一個機器的某個節點上再放一個副本,前者是為了防止節點宕機,後者則是為了防止整個機器宕機而使數據丟失。

(3)宕機處理

①DataNode會週期性地發送心跳信息給NameNode(默認3s一次)。如果NameNode在預定時間內沒有收到心跳信息(默認10min),他會認為DataNode出問題了,把他從集群中移除。然後HDFS會檢測到硬盤上的數據塊副本數量低於要求,然後對副本數量不符合要求的數據塊創建需要的副本,以達到預設的要求。DataNode可能會因為硬件故障、主板故障、電源老化和網絡故障等問題脫離集群。

②當HDFS讀取某個數據塊時,如果該節點正處於宕機,客戶端就會到存儲該數據塊的其他節點讀取,HDFS也會檢測到數據塊副本個數不符合要求而重新補全副本。

③當HDFS存儲數據時,如果要存放的節點宕機,HDFS會重新分配一個節點給數據塊,然後備份宕機節點的數據。

2.1.4 HDFS的特點

(1)優點:

高容錯性、適合大數據的處理、流式數據訪問(一次寫入,多次讀取;文件一旦寫入,不能修改,只能增加,這樣可以保證數據的一致性)

(2)缺點:

不適合低延遲數據的訪問、無法高效存儲大量小文件、不支持多用戶寫入以及任意修改文件(寫操作只能在文件末尾完成,只能執行追加操作)

2.2 分佈式計算框架——MapReduce

2.2.1 MapReduce簡介

MapReduce是Hadoop的核心計算框架,是用於大規模數據集(大於1TB)並行計算的編程模型,主要包括Map(映射)和Reduce(歸約)兩部分。當啟動一個MapReduce任務時,Map端會讀取HDFS上的數據,將數據映射成所需要的鍵值對類型並傳到Reduce端。Reduce端會接收Map端傳過來的鍵值對類型的數據,根據不同的分組,對每一組鍵相同的數據進行處理,得到新的鍵值對並輸出到HDFS,這就是MapReduce的核心思想。

2.2.2 MapReduce工作原理

(1)MapReduce執行流程(輸入、切片、Map階段數據處理、Reduce階段數據處理、數據輸出等階段)

Hadoop大數據開發基礎系列:一、初識Hadoop

著重說一下Reduce階段:Reduce任務也可以有多個,按照Map階段設置的數據分區決定(數據劃分的鍵的種類),一個分區數據被一個Reduce處理。針對每一個Reduce任務,Reduce會接收到不同的Map任務傳來的數據,並且每一個Map傳來的數據都是有序的。一個Reduce任務的每一次處理都是針對所有鍵相同的數據,對數據進行歸約,以新的鍵值對輸出到HDFS。

(2)MapReduce的本質:

Hadoop大數據開發基礎系列:一、初識Hadoop

(3)幫助理解map和reduce過程的小例子:

Hadoop大數據開發基礎系列:一、初識Hadoop

2.3 集群資源管理器——YARN

2.3.1 YARN簡介

YARN提供了一個更加通用的資源管理和分佈式應用框架,目的是使得Hadoop的數據處理能力更強。在這個框架上,用戶可以根據自己的需求實現定製化的數據處理應用。MapReduce也是YARN上的一個應用。YARN的另一個目標是拓展Hadoop,使得它不僅支持MapReduce計算,還能方便的管理如Hive、HBase、Pig、Spark等應用。通過YARN,各種應用就可以互不干擾地運行在同一個Hadoop系統中,共享整個集群資源。

2.3.2 YARN的基本架構和任務流程

(1)YARN的基本組成結構

總體上,YARN還是Master/Slave結構,ResourceManager為Mater,NodeManager是Slave,ResourceManager負責對各個NodeManager上的資源進行統一管理和調度。當用戶提交一個應用程序時,需要提供一個用於跟蹤和管理這個程序的ApplicationMaster,它負責向ResourceManager申請資源,並要求NodeManager啟動可以佔用一定資源的任務。由於不同的ApplicationMaster被分佈到不同的節點上,因此他們之間不會互相影響(即可以併發執行一些應用)。

Hadoop大數據開發基礎系列:一、初識Hadoop

①RM(ResourceManager):由兩個組件構成(調度器,scheduler;應用程序管理器 ASM)

ResourceManager 將各個資源部分(計算、內存、帶寬等)精心安排給基礎 NodeManager(YARN 的每節點代理)。ResourceManager 還與 ApplicationMaster 一起分配資源,與 NodeManager 一起啟動和監視它們的基礎應用程序。在此上下文中,ApplicationMaster 承擔了以前的 TaskTracker 的一些角色,ResourceManager 承擔了 JobTracker 的角色。

調度器負責給正在運行的應用程序分配資源,它不從事任何與具體應用程序相關的工作。

ASM負責處理客戶端提交的job以及協商第一個Container(包裝資源的對象)以供ApplicationMaster運行,並且在ApplicationMaster失敗的時候將其重新啟動。

②NM(NodeManager):

是每個節點上的資源和任務管理器。一方面,他會定時地向RM節點彙報本節點上的資源使用情況和各個Container的運行狀態;另一方面,它接收並處理來自ApplicationMaster的Container啟動/停止等請求。

container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。當ApplicationMaster向RM請求資源時,RM返回的資源便是用Container封裝的。YARN為每一個任務分配一個Container,且該任務只能使用該Container中描述的資源。

③AM(ApplicationMaster):相當於給一個應用配置了一個小管家

在用戶提交的每個應用程序時,系統都會生成一個AM幷包含到提交的程序裡,主要功能有:與RM中的調度器協商以獲取資源(用Container表示);將得到的任務進一步細分給內部的程序;與NM通信以啟動/停止服務;監控所有任務的運行狀態,並在任務運行失敗時重新為任務申請資源以重啟任務。

④CA(Client Application):客戶端應用程序

客戶端將應用程序提交到RM,首先會創建一個Application上下文件對象,並設置AM必需的資源請求信息,然後提交到RM。

(2)YARN的工作流程

詳細描述YARN從提交任務到完成任務的整個工作流程:

Hadoop大數據開發基礎系列:一、初識Hadoop

①用戶通過Client提交一個應用程序到YARN進行處理,其中包括AM程序、啟動AM的命令、用戶程序等。

②RM為該應用程序分配第一個Container,並與分配的Container所在位置的NodeManager進行通信,要求它在這個Container中啟動應用程序的AM。該Container用於啟動AM和AM後續命令。

③AM啟動後先向RM註冊,這樣用戶可以直接通過RM查看應用程序的運行狀態,然後開始為提交的應用程序所需要執行的各個任務申請資源,並監控它的運行狀態,知道運行結束。(即重複執行④——⑦)

④AM採用輪流詢問的方式通過RPC協議向RM申請和領取資源,並監控它的運行狀態,所以多個應用程序提交時,不一定是第一個先執行。

⑤一旦AM申請到資源,便與資源對應的NM通信,要求它在分配的資源中啟動任務。

⑥NM為任務設置好運行環境後,將任務啟動命令寫到一個腳本中,並通過運行該腳本啟動任務。

⑦被啟動的任務開始執行,各個任務通過某個RPC協議向AM彙報自己的狀態和進度,以讓AM隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啟動任務。在應用程序運行過程中,用戶可以隨時通過RPC向AM查詢應用程序的當前運行狀態。

⑧應用程序運行完成後,ApplicationMaster向RM註銷自己。

⑨關閉客戶端和AM。

3.Hadoop生態系統

Hadoop面世之後,相繼開發出了很多組件,這些組件共同提供服務給Hadoop相關工程,並逐步形成了系列化的組件系統,稱為Hadoop生態系統

Hadoop大數據開發基礎系列:一、初識Hadoop

(1)HBase

Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲

Hadoop大數據開發基礎系列:一、初識Hadoop

(2)Hive

Hive是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。

(3)Pig

Pig是一個基於Hadoop的大規模數據分析平臺,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換為一系列經過優化處理的MapReduce運算。

(4)Sqoop

Sqoop是一款開源的工具,主要用於在Hadoop(Hive)與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞,可以將一個關係型數據庫中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中。

Hadoop大數據開發基礎系列:一、初識Hadoop

(5)Flume

Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力

(6)Oozie

Oozie是基於hadoop的調度器,以xml的形式寫調度流程,可以調度mr,pig,hive,shell,jar任務等等。

主要的功能有

* Workflow: 順序執行流程節點,支持fork(分支多個節點),join(合併多個節點為一個)

* Coordinator,定時觸發workflow

* Bundle Job,綁定多個coordinator

(7)ZooKeeper

ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。

Hadoop大數據開發基礎系列:一、初識Hadoop

(8)Mahout

Mahout 是 Apache Software Foundation(ASF) 旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴展到雲中。

4.Hadoop應用場景

十大應用場景:(1) 在線旅遊 (2) 移動數據 (3) 電子商務 (4) 圖像處理 (5) 能源開採

(6) 詐騙檢測 (7) IT安全 (8) 醫療保健 (9) 搜索引擎 (10) 社交平臺

5.小結

本文從理論方面介紹了Hadoop的基本概念、Hadoop的特點,瞭解了Hadoop的核心思想;瞭解了HDFS、MapReduce、YARN三大主要的核心框架,深入瞭解了Hadoop的整體結構;簡單地瞭解了Hadoop的生態系統和一些應用場景。


分享到:


相關文章: