HBase 教程:什麼是 HBase?

banq發表於2021-12-30

HBase 是一個用 Java 編寫的開源、多維、分散式、可擴充套件和 NoSQL 資料庫。HBase 執行在HDFS(Hadoop 分散式檔案系統)之上,併為 Hadoop 提供類似 BigTable 的功能。它旨在提供一種容錯方式來儲存大量稀疏資料集。
因為,HBase 透過在龐大的資料集上提供更快的讀/寫訪問來實現高吞吐量和低延遲。因此,HBase 是需要快速隨機訪問大量資料的應用程式的選擇。
它提供了壓縮、記憶體操作和布隆過濾器(資料結構,它告訴一個值是否存在於一個集合中)來滿足快速和隨機讀寫的要求。
讓我們透過一個例子來理解它:噴氣發動機從壓力感測器、溫度感測器、速度感測器等不同的感測器生成各種型別的資料,這些資料表明發動機的健康狀況。這對於瞭解航班的問題和狀態非常有用。連續發動機執行每次飛行生成 500 GB 資料,每天大約有 30 萬次飛行。因此,近乎實時地應用於此類資料的引擎分析可用於主動診斷問題並減少計劃外停機時間。這需要一個分散式環境來儲存大量具有快速隨機讀寫的資料以進行實時處理。在這裡,HBase 來幫忙了。
 

HBase由來
Facebook 訊息平臺於 2010 年 11 月從 Apache Cassandra 轉移到 HBase。
Facebook Messenger 將訊息、電子郵件、聊天和簡訊結合到實時對話中。Facebook 試圖構建一個可擴充套件且強大的基礎設施來處理這些服務。
當時,訊息基礎設施處理了超過 3.5 億使用者,每月傳送超過 150 億條人對人的訊息。聊天服務支援超過 3 億使用者,每月傳送超過 1200 億條訊息。
透過監控使用情況,他們發現出現了兩種通用資料模式:

  • 一組短的時間資料,往往是不穩定的
  • 很少被訪問的不斷增長的資料集

Facebook 希望為這兩種使用模式找到一種儲存解決方案,他們開始研究尋找現有訊息基礎架構的替代品。2008 年初,他們使用了開源資料庫,即 Cassandra,這是一個最終一致性的鍵值儲存,已經投入生產,為收件箱搜尋提供流量。他們的團隊在使用和管理 MySQL 資料庫方面擁有豐富的知識,因此切換其中任何一種技術對他們來說都是一個嚴重的問題。
他們花了幾周時間測試不同的框架,以評估 MySQL、Apache Cassandra、Apache HBase 和其他系統的叢集。他們最終選擇了 HBase。
由於 MySQL 無法有效處理大型資料集,隨著索引和資料集變大,效能受到影響。他們發現 Cassandra 無法處理困難的模式來協調他們的新訊息基礎設施。
主要問題是: 
  • 儲存來自各種 Facebook 服務的大量持續增長的資料。
  • 需要可以對其進行高處理的資料庫。
  • 滿足數百萬個請求所需的高效能。
  • 保持儲存和效能的一致性。

針對所有這些問題,Facebook 想出了一個解決方案,即 HBase。Facebook 採用 HBase 來為 Facebook Messenger、聊天、電子郵件等提供服務,因為它具有多種功能。
HBase 為這種工作負載提供了非常好的可擴充套件性和效能,其一致性模型比 Cassandra 更簡單。雖然他們發現 HBase 最適合他們的要求,如自動負載平衡和故障轉移、壓縮支援、每臺伺服器多個分片等。
HDFS 是 HBase 使用的底層檔案系統,還為他們提供了一些所需的功能,例如端到端校驗和、複製和自動負載重新平衡。
由於訊息接受來自不同來源(如 SMS、聊天和電子郵件)的資料,因此他們編寫了一個應用伺服器來處理使用者訊息的所有決策。它與大量其他服務介面。附件儲存在 Haystack(適用於 HBase)中。他們還在 Apache ZooKeeper 之上編寫了一個使用者發現服務,該服務與其他基礎設施服務進行交流以進行朋友關係、電子郵件帳戶驗證、交付決策和隱私決策。
Facebook 團隊花了很多時間來確認這些服務中的每一個都是健壯的、可靠的,並且提供良好的效能來處理實時訊息傳遞系統。
  

HBase VS HDFS
HDFS 是一個基於 Java 的分散式檔案系統,它允許您跨 Hadoop 叢集中的多個節點儲存大資料。因此,HDFS 是一個底層儲存系統,用於在分散式環境中儲存資料。HDFS 是一個檔案系統,而 HBase 是一個資料庫(類似於 NTFS 和 MySQL)。
 

我們可以在哪裡使用 HBase?

  • 我們應該在擁有大型資料集(數百萬或數十億或行和列)的情況下使用 HBase,並且我們需要對資料進行快速、隨機和實時的讀寫訪問。
  • 資料集分佈在各個叢集中,我們需要高可擴充套件性來處理資料。
  • 資料是從各種資料來源收集的,可以是半結構化或非結構化資料,也可以是所有資料的組合。它可以透過 HBase 輕鬆處理。
  • 您想儲存面向列的資料。
  • 您有很多版本的資料集,您需要儲存所有這些版本。

   

HBase VS Cassandra

  • HBase 以 BigTable (Google) 為模型,而 Cassandra 基於最初由 Facebook 開發的 DynamoDB (Amazon)。
  • HBase 利用 Hadoop 基礎設施(HDFS、ZooKeeper),而 Cassandra 單獨發展,但您可以根據需要組合 Hadoop 和 Cassandra。
  • HBase 有幾個元件可以一起通訊,如 HBase HMaster、ZooKeeper、NameNode、Region Servers。而 Cassandra 是單一節點型別,其中所有節點都是平等的並執行所有功能。任何節點都可以是協調器;這消除了單點故障。
  • HBase針對讀最佳化,支援單寫,嚴格一致性。HBase 支援基於範圍的掃描,這使得掃描過程更快。而 Cassandra 支援保持最終一致性的單行讀取。
  • Cassandra 不支援基於範圍的行掃描,與 HBase 相比,這會減慢掃描過程。
  • HBase 支援有序分割槽,其中 Column Family 的行以 RowKey 順序儲存,而在 Casandra 中,有序分割槽是一個挑戰。由於 RowKey 分割槽,與 Cassandra 相比,HBase 中的掃描過程更快。
  • HBase 不支援讀負載均衡,一個 Region Server 服務讀請求,副本只在失敗時使用。而Cassandra支援讀負載均衡,可以從各個節點讀取相同的資料。這會損害一致性。
  • 在 CAP(Consistency, Availability & Partition -Tolerance)定理中,HBase 維護了一致性和可用性,而 Cassandra 則專注於可用性和分割槽容限性。

 

HBase 的特性

  • 原子讀寫: 在行級別,HBase 提供原子讀寫。可以解釋為,在一個讀或寫過程中,所有其他程式都被阻止執行任何讀或寫操作。
  • 一致的讀寫: 由於上述特性,HBase 提供一致的讀寫。
  • 線性和模組化可擴充套件性:由於資料集分佈在 HDFS 上,因此它可以跨各個節點線性擴充套件,也可以模組化擴充套件,因為它被劃分到各個節點。
  • 自動和可配置的表分片: HBase 表跨叢集分佈,這些叢集分佈在跨區域。這些區域和叢集分裂,並隨著資料的增長重新分佈。
  • 易於使用的 Java API 進行客戶端訪問:它提供了易於使用的 Java API 進行程式設計訪問。
  • Thrift 閘道器和 REST-ful Web 服務:它還支援用於非 Java 前端的 Thrift 和 REST API。
  • 塊快取和布隆過濾器:  HBase 支援用於大容量查詢最佳化的塊快取和布隆過濾器。
  • 自動故障支援: 帶有 HDFS 的 HBase 提供跨叢集的 WAL(預寫日誌),提供自動故障支援。
  • 排序的行鍵:由於搜尋是在行範圍內完成的,HBase 按字典順序儲存行鍵。使用這些排序的行鍵和時間戳,我們可以構建最佳化的請求。


 

相關文章