簡析分佈式計算框架:Hive HBase Hadoop HDFS

Hive

Hive是爲簡化編寫MapReduce程序而生的,使用MapReduce做過數據分析的人都知道,很多分析程序除業務邏輯不同外,程序流程基本一樣。在這種情況下,就需要Hive這樣的SQL似的用戶編程接口。Hive本身不存儲和計算數據,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯表,就是些表的定義等,也就是表的元數據。使用SQL實現Hive是因爲SQL大家都熟悉,轉換成本低,類似作用的Pig就不是SQL。

HBase

HBase爲查詢而生的,它通過組織起節點內所有機器的內存,提供一個超大的內存Hash表,它需要組織自己的數據結構,包括磁盤和內存中的,而Hive是不做這個的,表在HBase中是物理表,而不是邏輯表,搜索引擎使用它來存儲索引,以滿足查詢的實時性需求。

Hadoop

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

1 高可靠性:Hadoop按位存儲和處理數據的能力值得人們信賴。

2 高擴展性:Hadoop是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以千計的節點中。

3 高效性:Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

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

Hadoop是一個能夠對大量數據進行分佈式處理的軟件框架。但是Hadoop是以一種可靠、高效、可伸縮的方式進行處理的。Hadoop是可靠的,因爲它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新分佈處理。Hadoop是高效的,因爲它以並行的方式工作,通過並行處理加快處理速度。Hadoop還是可伸縮的,能夠處理 PB 級數據。

Hadoop有許多元素構成。其最底部是Hadoop Distributed File System(HDFS),它存儲Hadoop集羣中所有存儲節點上的文件。HDFS(對於本文)的上一層是MapReduce引擎,該引擎由JobTrackers和TaskTrackers組成。

HDFS

對外部客戶機而言,HDFS就像一個傳統的分級文件系統。可以創建、刪除、移動或重命名文件等。但是HDFS的架構是基於一組特定的節點構建的,這是由它自身的特點決定的。這些節點包括NameNode(僅一個),它在HDFS內部提供元數據服務;DataNode,它爲HDFS提供存儲塊。由於僅存在一個NameNode,因此這是HDFS的一個缺點(單點失敗)。

存儲在HDFS中的文件被分成塊,然後將這些塊複製到多個計算機中(DataNode)。這與傳統的RAID架構大不相同。塊的大小(通常爲 64MB)和複製的塊數量在創建文件時由客戶機決定。NameNode可以控制所有文件操作。HDFS內部的所有通信都基於標準的TCP/IP協議。

NameNode

NameNode是一個通常在HDFS實例中的單獨機器上運行的軟件。它負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

實際的 I/O事務並沒有經過NameNode,只有表示 DataNode和塊的文件映射的元數據經過NameNode。當外部客戶機發送請求要求創建文件時,NameNode會以塊標識和該塊的第一個副本的 DataNode IP地址作爲響應。這個NameNode還會通知其他將要接收該塊的副本的DataNode。

NameNode 在一個稱爲 FsImage 的文件中存儲所有關於文件系統名稱空間的信息。這個文件和一個包含所有事務的記錄文件(這裏是EditLog)將存儲在NameNode的本地文件系統上。FsImage和EditLog文件也需要複製副本,以防文件損壞或NameNode系統丟失。

DataNode

DataNode也是一個通常在HDFS實例中的單獨機器上運行的軟件。Hadoop集羣包含一個NameNode和大量DataNode。DataNode通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。Hadoop的一個假設是:機架內部節點之間的傳輸速度快於機架間節點的傳輸速度。

DataNode響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。NameNode依賴來自每個DataNode的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,NameNode可以根據這個報告驗證塊映射和其他文件系統元數據。如果DataNode不能發送心跳消息,NameNode將採取修復措施,重新複製在該節點上丟失的塊。

文件操作

HDFS 並不是一個萬能的文件系統。它的主要目的是支持以流的形式訪問寫入的大型文件。如果客戶機想將文件寫到 HDFS 上,首先需要將該文件緩存到本地的臨時存儲。如果緩存的數據大於所需的 HDFS 塊大小,創建文件的請求將發送給NameNode。NameNode將以DataNode標識和目標塊響應客戶機。同時也通知將要保存文件塊副本的DataNode。當客戶機開始將臨時文件發送給第一個DataNode時,將立即通過管道方式將塊內容轉發給副本DataNode。客戶機也負責創建保存在相同HDFS名稱空間中的校驗和(checksum)文件。在最後的文件塊發送之後,NameNode將文件創建提交到它的持久化元數據存儲(在EditLog和FsImage文件)。

Linux集羣

Hadoop框架可在單一的Linux平臺上使用(開發和調試時),但是使用存放在機架上的商業服務器才能發揮它的力量。這些機架組成一個Hadoop集羣。它通過集羣拓撲知識決定如何在整個集羣中分配作業和文件。Hadoop假定節點可能失敗,因此採用本機方法處理單個計算機甚至所有機架的失敗。

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