大數據學習第二章:Hadoop

1.Hadoop是什麼

Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構,用戶可以在不瞭解分佈式底層細節的情況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。
Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS具有高容錯性的特點,並且設計用來部署在低廉的硬件上,而且它提供高吞吐量來訪問應用程序的數據,適合那些有着超大數據集的應用程序
Hadoop的框架最核心的設計就是:HDFS和MapReduce。 HDFS爲海量的數據提供了存儲,而MapReduce則爲海量的數據提供了計算

1.1Hadoop發展歷史

Hadoop系統最初的源頭來自於Apache Lucene項目下的搜索引擎子項目Nutch,該項目的負責人是Doug Cutting。2003年,Google公司爲了解決其搜索引擎中大規模Web網頁數據的處理,研究發明了一套稱爲MapReduce的大規模數據並行處理技術,並於2004年在著名的OSDI國際會議上發表了一篇題爲MapReduce的論文,簡要介紹MapReduce的基本設計思想。論文發表後,Doug Cutting受到了很大啓發,他發現Google MapReduce所解決的大規模搜索引擎數據處理問題,正是他同樣面臨並急需解決的問題。因而,他嘗試依據Google MapReduce的設計思想,模仿Google MapReduce框架的設計思路,用Java設計實現出了一套新的MapReduce並行處理軟件系統,並將其與Nutch分佈式文件系統NDFS結合,用以支持Nutch搜索引擎的數據處理。2006年,他們把NDFS和MapReduce從Nutch項目中分離出來,成爲一套獨立的大規模數據處理軟件系統,並使用Doug Cutting小兒子當時呀呀學語稱呼自己的玩具小象的名字“Hadoop”命名了這個系統。2008年他們把Hadoop貢獻出來,成爲Apache最大的一個開源項目,並逐步發展成熟,成爲一個包含了HDFS、MapReduce、HBase、Hive、Zookeeper等一系列相關子項目的大數據處理平臺和生態系統。
Hadoop開源項目自最初推出後,經歷了數十個版本的演進。它從最初於2007年推出的Hadoop-0.14.X測試版,一直髮展到2011年5月推出了經過4500臺服務器產品級測試的最早的穩定版0.20.203.X。到2011年12月,Hadoop又在0.20.205版基礎上發佈了Hadoop1.0.0,該版本到2012年3月發展爲Hadoop1.0.1穩定版。1.0版繼續發展,到2013年8月發展爲Hadoop1.2.1穩定版。
與此同時,由於Hadoop1.X以前版本在MapReduce基本構架的設計上存在作業主控節點(JobTracker)單點瓶頸、作業執行延遲過長、編程框架不靈活等較多的缺陷和不足,2011年10月,Hadoop推出了基於新一代構架的Hadoop0.23.0測試版,該版本系列最終演化爲Hadoop2.0版本,即新一代的Hadoop系統YARN。2013年10月YARN已經發展出Hadoop2.2.0穩定版。

1.2Hadoop的發行版本

Hadoop的發行版除了有Apache hadoop外cloudera,hortonworks,mapR,華爲,DKhadoop等都提供了自己的商業版本。

商業發行版主要是提供了更爲專業的技術支持,這對於大型企業更爲重要,不同發行版都有自己的一些特點,本文就各發行版做簡單對比介紹。

對比版選擇:DKhadoop發行版、cloudera發行版、hortonworks發行版。
1、DKhadoop發行版:有效的集成了整個HADOOP生態系統的全部組件,並深度優化,重新編譯爲一個完整的更高性能的大數據通用計算平臺,實現了各部件的有機協調。因此DKH相比開源的大數據平臺,在計算性能上有了高達5倍(最大)的性能提升。DKhadoop將複雜的大數據集羣配置簡化至三種節點(主節點、管理節點、計算節點),極大的簡化了集羣的管理運維,增強了集羣的高可用性、高可維護性、高穩定性。
2、Cloudera發行版:CDH是Cloudera的hadoop發行版,完全開源,比Apache hadoop在兼容性,安全性,穩定性上有增強。
3、Hortonworks發行版:Hortonworks 的主打產品是Hortonworks Data Platform (HDP),也同樣是100%開源的產品,其版本特點:HDP包括穩定版本的Apache Hadoop的所有關鍵組件;安裝方便,HDP包括一個現代化的,直觀的用戶界面的安裝和配置工具。

1.3Hadoop的優缺點

優點

高可靠性:因爲 Hadoop 假設計算元素和存儲會出現故障,因爲它維護多個工作數據副本,在出現故障時可以對失敗的節點重新分佈處理

高擴展性:在集羣間分配任務數據,可方便的擴展數以千計的節點。

高效性:在 MapReduce 的思想下,Hadoop 是並行工作的,以加快任務處理速度。

高容錯性:自動保存多份副本數據,並且能夠自動將失敗的任務重新分配。

缺點

Hadoop不適用於低延遲數據訪問。

Hadoop不能高效存儲大量小文件。

Hadoop不支持多用戶寫入並任意修改文件

2.Hadoop架構組成

整個Hadoop的體系結構主要是通過HDFS來實現對分佈式存儲的底層支持,並通過MR來實現對分佈式並行任務處理的程序支持。

HDFS採用主從(Master/Slave)結構模型,一個HDFS集羣是由一個NameNode和若干個DataNode組成的(在最新的Hadoop2.2版本已經實現多個NameNode的配置-這也是一些大公司通過修改hadoop源代碼實現的功能,在最新的版本中就已經實現了)。NameNode作爲主服務器,管理文件系統命名空間和客戶端對文件的訪問操作。DataNode管理存儲的數據。HDFS支持文件形式的數據。
在這裏插入圖片描述
從內部來看,文件被分成若干個數據塊,這若干個數據塊存放在一組DataNode上。NameNode執行文件系統的命名空間,如打開、關閉、重命名文件或目錄等,也負責數據塊到具體DataNode的映射。DataNode負責處理文件系統客戶端的文件讀寫,並在NameNode的統一調度下進行數據庫的創建、刪除和複製工作。NameNode是所有HDFS元數據的管理者,用戶數據永遠不會經過NameNode。

NameNode:存儲文件的元數據,如文件名稱,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每個文件的塊列表和塊所在的DataNode等

DataNode:在本地文件系統存儲文件塊數據,以及數據塊的校驗

Secondary NameNode:用來監控HDFS狀態的輔助後臺程序,每隔一段時間獲取HDFS元數據的快照。

2.1 MapReduce架構原理

MapReduce是一種可用於數據處理的編程模型,其程序的本質是並行運行的,可以將大規模的數據分析任務分發給任何一個擁有足夠多機器的數據中心

MapReduce任務過程分爲兩個處理階段:Map階段與reduce階段

Map階段並行處理輸入數據

Reduce階段對map結果進行彙總

2.1.1 YARN架構原理

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uES8Anbl-1592129871555)(/image-20190419111414912.png)]
Apache YARN 是Hdoop集羣資源管理系統。YARN 被引入Hadoop2.x版本,最初是爲了改善MapReduce實現,它具有足夠的通用性,可以支持其它的分佈式計算模型

YARN通過兩類長期運行的守護進程提供自己的核心服務:

1)管理集羣上資源使用的資源管理器 resource manager: 處理客戶端請求、啓動/監控 ApplicationMaster、監控 NodeManager、資源分配與調度;

2)運行在集羣中所有節點上且能夠啓動和監控容器的節點管理器node manager:單個節點上的資源管理,處理來自resourceManager的命令、處理來自applicationMaster的命令

3)用於執行特定應用程序的容器container:對任務運行環境的抽象,封裝了 CPU、內存等多維資源以及環境變量、啓動命令等任務運行相關的信息。

4)applicationMaster :數據切分、爲應用程序申請資源,並分配給內部任務、任務監控與容錯。

3.大數據技術生態體系

在這裏插入圖片描述

上圖中涉及到的技術名詞解釋如下:

1)Sqoop:sqoop 是一款開源的工具,主要用於在 Hadoop(Hive)與傳統的數據庫(mysql)間進
行數據的傳遞,可以將一個關係型數據庫(例如 : MySQL ,Oracle 等)中的數據導進到
Hadoop 的 HDFS 中,也可以將 HDFS 的數據導進到關係型數據庫中。

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

3)Kafka:Kafka 是一種高吞吐量的分佈式發佈訂閱消息系統,有如下特性:

(1)通過 O(1)的磁盤數據結構提供消息的持久化,這種結構對於即使數以 TB 的消息 存儲也能夠保持長時間的穩定性能。
(2)高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒數百萬的消息 (3)支持通過 Kafka 服務器和消費機集羣來分區消息。

(4)支持 Hadoop 並行數據加載。

4)Storm:Storm 爲分佈式實時計算提供了一組通用原語,可被用於“流處理”之中,實時

處理消息並更新數據庫。這是管理隊列及工作者集羣的另一種方式。 Storm 也可被用於“連

續計算”(continuous computation),對數據流做連續查詢,在計算時就將結果以流的形式

輸出給用戶。

5)Spark:Spark 是當前最流行的開源大數據內存計算框架。可以基於 Hadoop 上存儲的大數據進行計算。

6)Oozie:Oozie 是一個管理 Hdoop 作業(job)的工作流程調度管理系統。Oozie 協調作業
就是通過時間(頻率)和有效數據觸發當前的 Oozie 工作流程。

7)Hbase:HBase 是一個分佈式的、面向列的開源數據庫。HBase 不同於一般的關係數據庫,
它是一個適合於非結構化數據存儲的數據庫。

8)Hive:hive 是基於 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件映射爲一張
數據庫表,並提供簡單的 sql 查詢功能,可以將 sql 語句轉換爲 MapReduce 任務進行運行。
其優點是學習成本低,可以通過類 SQL 語句快速實現簡單的 MapReduce 統計,不必開發專
門的 MapReduce 應用,十分適合數據倉庫的統計分析。

9)Mahout:

Apache Mahout是個可擴展的機器學習和數據挖掘庫,當前Mahout支持主要的4個用 例:
推薦挖掘:蒐集用戶動作並以此給用戶推薦可能喜歡的事物。 聚集:收集文件並進行相關文件分組。 分類:從現有的分類文檔中學習,尋找文檔中的相似特徵,併爲無標籤的文檔進行正確 的歸類。

頻繁項集挖掘:將一組項分組,並識別哪些個別項會經常一起出現。

10)ZooKeeper:Zookeeper 是 Google 的 Chubby 一個開源的實現。它是一個針對大型分佈
式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分佈式同步、組服務等。
ZooKeeper 的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能
穩定的系統提供給用戶。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章