HBase的使用

NoSQL HBase 編程語言 Java IT星源 2017-06-25

HBase和傳統數據庫,基礎原理上的區別在於,傳統數據庫使用B+樹,HBase使用LSM樹

B+樹

  • 動態多級索引,支持高效的插入,查找和刪除。

  • 頻繁更新可能會使樹失衡,需要重新組織。

  • 索引文件存儲在磁盤上。相比於二叉樹,每個節點就可以存放更多的記錄,樹更矮了,I/O操作更少了。所以B+Tree擁有更好的性能

  • 支持範圍掃描。每個葉節點按順序鏈接,便於範圍查詢。

LSM樹

  • 寫入數據首先按順序存儲在日誌文件,而後寫入內存。內存中保存了最新的更新

  • 當內存為“已滿”時,數據刷新到磁盤,所有記錄對安裝有序列表的方式存儲。此時,舊的日誌文件可以被丟棄

  • 隨著時間推移,大量的數據文件被創建。後臺進程會將這些文件聚合成較大的文件

  • 所有文件總是按關鍵字排序的,插入新數據,也不需要重新排序

  • 查找操作。首先在內存存儲中查找,如果沒有,在磁盤存儲中查找

  • 刪除操作。使用標記刪除。當進行定期的歸併時,才會真正刪除

總的來說

B +樹:當沒有那麼多更新時,工作得很好。會在隨機磁盤位置插入數據。更新和刪除操作受限於以磁盤尋道的速率

LSM-樹:能更好地適應大量數據,保證一致的插入率,將隨機寫入轉換成順序寫入。讀取與寫入無關,數據佈局更加優化。

HBase存儲

HMaster:HMaster是主服務器。負責監視集群中的所有RegionServer實例,保留元數據,跟ZooKeeper通信。在分佈式集群中,Master通常在NameNode上運行。

HRegionServer:HRegionServer負責服務和管理region。在分佈式集群中,RegionServer在DataNode上運行。處理WAL和HFiles。這些文件分塊存儲在HDFS

HBase的使用

一般通信流程。客戶端先與ZooKeeper通信,ZooKeeper返回保存-root-的服務器名稱。通過-root-信息,客戶端查找.meta.服務器的名稱。-root-中存儲了.meta.的位置,而在.meta.中保存了具體數據(region)的存儲位置。通常,查找過程會被緩存,以提高後續查找速度

使用HBase

HBase是一種“NoSQL”數據庫。它不是支持SQL作為主要訪問語言的RDBMS。有許多類型的NoSQL數據庫:比如BerkeleyDB是本地NoSQL數據庫,而HBase是分佈式數據庫。從技術上講,相比於RDBMS,HBase缺少很多功能,比如列的類型,輔助索引,觸發器和高級查詢語言等。

然而,HBase具有支持擴展功能,通過添加RegionServers來擴展HBase集群。例如,一個群集的RegionServers從10個擴展到20個,它們在存儲和處理能力方面都會翻倍。RDBMS是單個數據庫服務器,為了獲得最佳性能,需要專門的硬件和存儲設備。

HBase功能有:

  • 強一致的讀/寫:HBase不是“最終一致”的。這使得它非常適合高速計數、聚合等任務。

  • 自動分片:HBase表通過regions分佈在集群上,隨著數據的增長,regions會自動分割和重新分配。

  • RegionServer故障轉移

  • Hadoop/HDFS集成:HBase作為分佈式文件系統支持使用HDFS。

  • MapReduce:HBase支持通過MapReduce進行大規模並行處理,將HBase用作數據源。

  • Java客戶端API:HBase支持一個易於使用的Java API,進行編程訪問。

  • Thrift/REST API:HBase還支持非Java的Thrift和REST API。

  • 塊緩存和過濾器:HBase支持緩存和過濾器,用於大批量查詢優化。

HBase不適合的問題。

  1. 確保你有足夠的數據。如果有數億或數十億行,那麼HBase是一個很好的選擇。如果只有幾千萬行,那麼使用傳統的RDBMS可能是一個更好的選擇,因為所有的數據可能會在單個節點上存儲,而其餘的集群可能會沒有用。

  2. 確保可以不使用RDBMS提供的許多功能(例如,有類型的列,索引,事務,高級查詢語言等)。根據RDBMS構建的應用程序不能通過簡單更改來“移植”到HBase上。考慮從RDBMS轉移到HBase,需要完全重新設計。

  3. 確保有足夠的硬件支持。即使是HDFS,少於5個節點的集群也不會很好(由於諸如HDFS塊複製(缺省值為3)等)。

HBase和HDFS

HDFS是一種非常適合存儲大型文件的分佈式文件系統。然而,它不是通用文件系統,不提供在文件中快速的查找單條記錄的能力。

另一方面,HBase雖然構建在HDFS之上,但為大型數據表提供快速的查找和更新。HBase將數據放在HDFS上,通過索引文件“StoreFiles”進行高速查找。

相關推薦

推薦中...