在大數據的發展過程當中,出現了一批專門應用與大數據的處理分析工具,如Hadoop,Hbase,Hive,Spark等,咱們先從最基礎的Hadoop開始進行介紹node
Hadoop是apache基金會下所開發的分佈式基礎架構,實現了一個分佈式文件系統(HDFS),HDFS擁有高容錯性、高可靠性、高擴展性、高效性、低成本的特性,可讓用戶在不瞭解相關的底層源碼的狀況下,在廉價的機器上搭配一臺完整的服務器進行分佈式程序開發,利用集羣的高速運算和存儲處理本身的業務。數據庫
一個應用程序無非就是計算和存儲兩個部分,Hadoop也不例外,他的兩大核心設計就是HDFS和MapReduce兩個組建,HDFS實現了Hadoop的海量數據的存儲,而MapReduce則爲存儲的海量數據提供了計算apache
核心架構:編程
在Hadoop官方網站上對於Hadoop項目的構成有詳細的講解,主要包括服務器
Hadoop Common:支持其餘Hadoop模塊的經常使用實用程序。網絡
Hadoop分佈式文件系統(HDFS™):一種分佈式文件系統,可提供對應用程序數據的高吞吐量訪問。架構
Hadoop YARN:做業調度和集羣資源管理的框架。app
Hadoop MapReduce:基於YARN的系統,用於並行處理大型數據集。框架
Apache的其餘Hadoop相關項目包括:機器學習
Ambari™:基於Web的工具,用於配置,管理和監控Apache Hadoop集羣,包括對Hadoop HDFS,Hadoop MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop的支持。Ambari還提供了一個用於查看羣集運行情況的儀表板,例如熱圖,以及可視化查看MapReduce,Pig和Hive應用程序的功能,以及以用戶友好的方式診斷其性能特徵的功能。
Avro™:數據序列化系統。
Cassandra™:可擴展的多主數據庫,沒有單點故障。
Chukwa™:用於管理大型分佈式系統的數據收集系統。
HBase™:可擴展的分佈式數據庫,支持大型表的結構化數據存儲。
Hive™:一種數據倉庫基礎架構,提供數據彙總和即席查詢。
Mahout™:可擴展的機器學習和數據挖掘庫。
Pig™:用於並行計算的高級數據流語言和執行框架。
Spark™:用於Hadoop數據的快速通用計算引擎。Spark提供了一種簡單而富有表現力的編程模型,支持普遍的應用程序,包括ETL,機器學習,流處理和圖形計算。
Tez™:基於Hadoop YARN構建的通用數據流編程框架,它提供了一個功能強大且靈活的引擎,能夠執行任意DAG任務來處理批量和交互式用例的數據。Tez正在被Hadoop生態系統中的Hive™,Pig™和其餘框架以及其餘商業軟件(例如ETL工具)採用,以取代Hadoop™MapReduce做爲底層執行引擎。
ZooKeeper™:用於分佈式應用程序的高性能協調服務
在知道了Hadoop集羣的項目構成以後咱們便開始挨個項目進行說明
Hadoop-----HDFS
[if !supportLists]一、[endif]由於HDFS實例是一個分佈式的處理機制,因此可能包括成千上萬臺服務器計算機,每個計算機存儲文件的一部分,可是,由於各類各樣的緣由,每個計算機都有可能在使用過程當中出現各類問題,好比斷電等,全部這就意味着在這麼多的服務器中總有幾個是處在沒法使用的狀態,所以檢測故障並能快速的回覆保證計算的正常進行是HDFS的核心架構目標
[if !supportLists]二、[endif]HDFS的設計主要是用於批處理而不是一般的用戶的交互式的通用應用程序,數據訪問的高吞吐量是重點,因此posix放鬆了對於HDFS的監管,能夠經過流式處理的方式對於文件系統中的數據進行相應的處理。
[if !supportLists]三、[endif]由於要處理的數據量特別巨大,單一的服務器根本不可能完成這一任務,全部,HDFS被調整爲支持大文件,將一個大的文件分解成多個同樣大小的小文件而後分散到各個集羣的節點上進行計算
[if !supportLists]四、[endif]爲了簡化數據的一致性問題以及實現高吞吐量的數據訪問,HDFS提供了一個一次寫入屢次讀取的文件訪問模型,當文件寫入HDFS以後,能夠被屢次讀取進行計算,可是,在一次寫入以後除了追加和截斷以外,不能再次寫入,可是能夠經過append方法在文件的末尾進行追加,典型的就是MapReduce應用程序
[if !supportLists]五、[endif]在應用程序請求計算的時候,若是將數據向計算移動的話,由於數據量太大會形成大量的網絡延遲以及時間的浪費,而且會消耗大量的資源,可是,若是計算向數據移動,由於計算的應用程序佔用的內存很小,在進行傳輸的過程當中不會消耗太多的資源並且傳輸速度很快,不會產生網絡擁塞並提升了系統的總體吞吐量
[if !supportLists]六、[endif]HDFS的設計便於在軟件和硬件兩個平臺進行移植
基於以上6點,也會發現HDFS不適合應用在要求低延遲的數據訪問、存儲大量的小文件、多用戶寫入、任意修改文件的場景,由於這幾個場景不只僅不會體現其在數據處理方面的超強的能力,相反還會成爲一個拖累,處理能力還不如普通的處理方式
HDFS具備主從架構,集羣由一個NameNode和多個DataNodes構成,以及輔助節點Secondary Namenode
NameNode對集羣中的文件系統命名空間的主服務器和客戶端對於文件的訪問組成。存儲DataNode中塊的管理信息(塊管理
經過處理註冊和按期心跳來提供Datanode集羣成員資格。
進程阻止報告並維護塊的位置。
支持塊相關操做,如建立,刪除,修改和獲取塊位置。
管理副本放置,阻止複製下的塊的複製,並刪除過分複製的塊。
)
DataNodes管理節點的存儲,每個DataNode的上有多個block塊構成,傳入系統的大文件就被存儲在着一個個的block塊(默認大小爲64MB)中並按期的向NameNode發送block塊的列表信息(
一、能夠存儲大於磁盤容量的文件,將塊存儲在不一樣的磁盤上,提升了集羣磁盤的利用率。
二、將傳入的文件轉化成塊存儲,能夠實現元數據和塊的分離,用一個單獨的節點存儲塊的地址信息等,便於管理。
數據塊適合用於數據備份進而提供數據容錯能力和提升可用性
)
Secondary Namenode:輔助NameNode進行fsimage和edit.log的合併,減輕namenode的壓力
本文章主要翻譯於官方網站,若有雷同,純屬巧合