在大數據的發展過程中,出現了一批專門應用與大數據的處理分析工具,如Hadoop,Hbase,Hive,Spark等,我們先從最基礎的Hadoop開始進行介紹 Hadoop是apache基金會下所開發的分散式基礎架構,實現了一個分散式文件系統(HDFS),HDFS擁有高容錯性、高可靠性、高擴展性、高效 ...
在大數據的發展過程中,出現了一批專門應用與大數據的處理分析工具,如Hadoop,Hbase,Hive,Spark等,我們先從最基礎的Hadoop開始進行介紹
Hadoop是apache基金會下所開發的分散式基礎架構,實現了一個分散式文件系統(HDFS),HDFS擁有高容錯性、高可靠性、高擴展性、高效性、低成本的特性,可以讓用戶在不瞭解相關的底層源碼的情況下,在廉價的機器上搭配一臺完整的伺服器進行分散式程式開發,利用集群的高速運算和存儲處理自己的業務。
一個應用程式無非就是計算和存儲兩個部分,Hadoop也不例外,他的兩大核心設計就是HDFS和MapReduce兩個組建,HDFS實現了Hadoop的海量數據的存儲,而MapReduce則為存儲的海量數據提供了計算
核心架構:
在Hadoop官方網站上對於Hadoop項目的構成有詳細的講解,主要包括
Hadoop Common:支持其他Hadoop模塊的常用實用程式。
Hadoop分散式文件系統(HDFS™):一種分散式文件系統,可提供對應用程式數據的高吞吐量訪問。
Hadoop YARN:作業調度和集群資源管理的框架。
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]1、[endif]因為HDFS實例是一個分散式的處理機制,所以可能包括成千上萬台伺服器電腦,每一個電腦存儲文件的一部分,但是,因為各種各樣的原因,每一個電腦都有可能在使用過程中出現各種問題,比如斷電等,所有這就意味著在這麼多的伺服器中總有幾個是處在無法使用的狀態,因此檢測故障並能快速的回覆保證計算的正常進行是HDFS的核心架構目標
[if !supportLists]2、[endif]HDFS的設計主要是用於批處理而不是通常的用戶的互動式的通用應用程式,數據訪問的高吞吐量是重點,所以posix放鬆了對於HDFS的監管,可以通過流式處理的方式對於文件系統中的數據進行相應的處理。
[if !supportLists]3、[endif]因為要處理的數據量特別巨大,單一的伺服器根本不可能完成這一任務,所有,HDFS被調整為支持大文件,將一個大的文件分解成多個一樣大小的小文件然後分散到各個集群的節點上進行計算
[if !supportLists]4、[endif]為了簡化數據的一致性問題以及實現高吞吐量的數據訪問,HDFS提供了一個一次寫入多次讀取的文件訪問模型,當文件寫入HDFS之後,可以被多次讀取進行計算,但是,在一次寫入之後除了追加和截斷之外,不能再次寫入,但是可以通過append方法在文件的末尾進行追加,典型的就是MapReduce應用程式
[if !supportLists]5、[endif]在應用程式請求計算的時候,如果將數據向計算移動的話,因為數據量太大會造成大量的網路延遲以及時間的浪費,並且會消耗大量的資源,但是,如果計算向數據移動,因為計算的應用程式占用的記憶體很小,在進行傳輸的過程中不會消耗太多的資源而且傳輸速度很快,不會產生網路擁塞並提高了系統的整體吞吐量
[if !supportLists]6、[endif]HDFS的設計便於在軟體和硬體兩個平臺進行移植
基於以上6點,也會發現HDFS不適合應用在要求低延遲的數據訪問、存儲大量的小文件、多用戶寫入、任意修改文件的場景,因為這幾個場景不僅僅不會體現其在數據處理方面的超強的能力,相反還會成為一個拖累,處理能力還不如普通的處理方式
HDFS具有主從架構,集群由一個NameNode和多個DataNodes構成,以及輔助節點Secondary Namenode
NameNode對集群中的文件系統命名空間的主伺服器和客戶端對於文件的訪問組成。存儲DataNode中塊的管理信息(塊管理
通過處理註冊和定期心跳來提供Datanode集群成員資格。
進程阻止報告並維護塊的位置。
支持塊相關操作,如創建,刪除,修改和獲取塊位置。
管理副本放置,阻止複製下的塊的複製,並刪除過度複製的塊。
)
DataNodes管理節點的存儲,每一個DataNode的上有多個block塊構成,傳入系統的大文件就被存儲在著一個個的block塊(預設大小為64MB)中並定期的向NameNode發送block塊的列表信息(
1、可以存儲大於磁碟容量的文件,將塊存儲在不同的磁碟上,提高了集群磁碟的利用率。
2、將傳入的文件轉化成塊存儲,可以實現元數據和塊的分離,用一個單獨的節點存儲塊的地址信息等,便於管理。
數據塊適合用於數據備份進而提供數據容錯能力和提高可用性
)
Secondary Namenode:輔助NameNode進行fsimage和edit.log的合併,減輕namenode的壓力
本文章主要翻譯於官方網站,如有雷同,純屬巧合