Hadoop百度百科
Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。
Hadoop其實只是一種數據處理的框架,具體去處理什麼問題,不是平臺本身決定的。hadoop的出現時源於現實中存儲和需要分析的數據的激增,最終要解決什麼問題是看使用者要解決什麼問題。
用戶可以在不瞭解分佈式底層細節的情況下,開發分佈式程序。充分利用集群的威力進行高速運算和存儲。
Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。
Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,則MapReduce為海量的數據提供了計算。
基礎知識
如今是大數據時代,而且學習大數據都會先學習Hadoop,因為它是目前世界上最流行的分佈式數據處理框架。
Hadoop的核心是YARN,HDFS,Mapreduce,常用模塊架構如下
HDFS
HDFS是一個分佈式文件系統,在HDFS上寫文件的過程與我們平時使用的單機文件系統非常不同,從宏觀上來看,在HDFS文件系統上創建並寫一個文件,流程如下圖(來自《Hadoop:The Definitive Guide》一書)所示:
具體過程描述如下:
Client調用DistributedFileSystem對象的create方法,創建一個文件輸出流(FSDataOutputStream)對象
通過DistributedFileSystem對象與Hadoop集群的NameNode進行一次RPC遠程調用,在HDFS的Namespace中創建一個文件條目(Entry),該條目沒有任何的Block
通過FSDataOutputStream對象,向DataNode寫入數據,數據首先被寫入FSDataOutputStream對象內部的Buffer中,然後數據被分割成一個個Packet數據包
以Packet最小單位,基於Socket連接發送到按特定算法選擇的HDFS集群中一組DataNode(正常是3個,可能大於等於1)中的一個節點上,在這組DataNode組成的Pipeline上依次傳輸Packet
這組DataNode組成的Pipeline反方向上,發送ack,最終由Pipeline中第一個DataNode節點將Pipeline ack發送給Client
完成向文件寫入數據,Client在文件輸出流(FSDataOutputStream)對象上調用close方法,關閉流
調用DistributedFileSystem對象的complete方法,通知NameNode文件寫入成功
Mapreduce
源自於谷歌的MapReduce論文,用以進行大數據量的計算,它屏蔽了分佈式計算框架細節,將計算抽象成map和reduce兩部分。
HBASE(分佈式列存數據庫)
源自谷歌的Bigtable論文,是一個建立在HDFS之上,面向列的針對結構化的數據可伸縮,高可靠,高性能分佈式和麵向列的動態模式數據庫
zookeeper
解決分佈式環境下數據管理問題,統一命名,狀態同步,集群管理,配置同步等
yarn分佈式資源管理器
Apache Hadoop YARN (Yet Another Resource Negotiator,另一種資源協調者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。
YARN最初是為了修復MapReduce實現裡的明顯不足,並對可伸縮性(支持一萬個節點和二十萬個內核的集群)、可靠性和集群利用率進行了提升。YARN實現這些需求的方式是,把Job Tracker的兩個主要功能(資源管理和作業調度/監控)分成了兩個獨立的服務程序——全局的資源管理(RM)和針對每個應用的應用 Master(AM),這樣一個應用要麼是傳統意義上的MapReduce任務,要麼是任務的有向無環圖(DAG)。
YARN從某種那個意義上來說應該算做是一個雲操作系統,它負責集群的資源管理。在操作系統之上可以開發各類的應用程序,例如批處理MapReduce、流式作業Storm以及實時型服務Storm等。這些應用可以同時利用Hadoop集群的計算能力和豐富的數據存儲模型,共享同一個Hadoop 集群和駐留在集群上的數據。此外,這些新的框架還可以利用YARN的資源管理器,提供新的應用管理器實現。
YARN的核心思想 將JobTracker和TaskTacker進行分離,它由下面幾大構成組件:
a. 一個全局的資源管理器 ResourceManager
b. ResourceManager的每個節點代理 NodeManager
c. 表示每個應用的 ApplicationMaster
d. 每一個ApplicationMaster擁有多個Container在NodeManager上運行