本節書摘來異步社群《hbase權威指南》一書中的第1章,第1.5節,作者: 【美】lars george 譯者: 代志遠 , 劉佳 , 蔣傑 責編: 楊海玲,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
看過bigtable的架構之後,我們可能會簡單地認為hbase完全是google的bigtable的開源實作。但是這個說法可能過于簡單,因為兩者之間還有些差異(大多是細微的)值得一提。
hbase是powerset㉑在2007年建立的,最初是hadoop的一部分。之後,它逐漸成為apache軟體基金會旗下的頂級項目,具備apache軟體許可證,版本為2.0。
下面是一個hbase随時間發展的簡短概述。
2006年11月:google釋出bigtable論文。
2007年2月:hbase宣布在hadoop項目中成立。㉒
2007年10月:hbase第一個“可用”版本(hadoop 0.15.0)。
2008年1月:hadoop成為apache的頂級項目,hbase成為hadoop的子項目。
2008年10月:hbase 0.18.1 釋出。
2009年1月:hbase 0.19.0釋出。
2009年9月:hbase 0.20.0 釋出,性能有明顯提升。
2010年5月:hbase成為apache的頂級項目。
2010年6月:hbase 0.89.20100621,第一個開發版本。
2011年1月:hbase 0.90.0 釋出,穩定性和持久性有所提升。
2011年年中:hbase 0.92.0 釋出,支援協處理器和安全控制。
文字2010年5月前後,hbase的開發者決定打破一直依賴的、步調一緻的hadoop的版本編号。原因是hbase有一個更快的釋出周期,同時更接近1.0版本的水準,比hadoop的預期更快。
為此,版本号從0.20.x跳到了0.89.x,跳躍相當明顯。此外,還做了一個決定,将0.89.x定為早期的開發版本。在0.89的基礎上最終釋出了0.90,即面向所有使用者的穩定版。
hbase與bigtable最大的不同就是命名。表1-1羅列了兩個系統之間相同元件的命名有哪些不同。
更多的差異參見附錄f。
讓我們回到1.3.1節來看看怎樣用次元來描述hbase系統。hbase是一個分布式的、持久的、強一緻性的存儲系統,具有近似最優的寫性能(能使i/o使用率達到飽和) 和出色的讀性能,它充分利用了磁盤空間,支援特定列族切換可選壓縮算法。
hbase繼承自bigtable模型,隻考慮單一的索引,類似于rdbms中的主鍵,提供了伺服器端鈎子,可以實施靈活的輔助索引解決方案。此外,它還提供了過濾器功能,減少了網絡傳輸的資料量。
hbase并未将說明性查詢語言作為核心實作的一部分,對事務的支援也有限。但行原子性和“讀-修改-寫”操作在實踐中彌補了這個缺陷,它們覆寫了大部分的使用場景并消除了在其他系統中經曆過的死鎖、等待問題。
hbase在進行負載均衡和故障恢複時對用戶端是透明的。在生産系統中,系統的可擴充性展現在系統自動伸縮的過程中。更改叢集并不涉及重新全量負載均衡和資料重分區,但整個處理過程完全是自動化的。
⑦facebook使用了haystack,haystack優化了二進制大對象的存儲結構,提供了二進制小對象存儲,例如圖檔。
⑨linux、apache、mysql和php(或者perl和python)的縮寫。
⑩atomicity、consistency、isolation和durability的縮寫。
⑯ddi這個詞是salmen博士等人于2009年在“cloud data structure diagramming techniques and design patterns”一文中提出的。
⑰請注意,這僅僅是一個示範用例,是以故意将模式設計得很簡單。
⑱在5.1.3節中會看到,還可以不設定qualifier。
⑲雖然hbase不支援線上的region合并,但是有離線處理合并的工具,詳情見11.6節。
㉑powerset公司位于舊金山,開發了一套用于網際網路的自然語言搜尋引擎。在2008年7月1日,微軟公司收購了powerset,之後powerset放棄了對hbase開發的後續支援。
㉒在apache jira(網站上的問題追蹤系統)中找到hbase-287,裡面可以找到當時的記錄,讀者可以看到mike cafarella送出的最初代碼,這個代碼很快就被jim kellerman采納了,jim kellerman當時就職于powerset。