歡迎光臨
每天分享高質量文章

一文讀懂大資料時代的結構化儲存資料庫——HBase

開源最前線(ID:OpenSourceTop) 猿妹 整編

綜合自:GitHub、http://blog.csdn.net/u010270403/article/details/51648462等

Hbase非常適合於非結構化資料儲存的資料庫,2006年底由PowerSet 的Chad Walters和Jim Kellerman 發起,2008年成為Apache Hadoop的一個子專案。現已作為產品在多家企業被使用

分散式資料庫 HBase


授權協議:Apache

開發語言:Java

作業系統:跨平臺

專案地址:https://github.com/apache/hbase

HBase專案簡介


HBase – Hadoop Database,是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化儲存叢集。

HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作為其檔案儲存系統,HBase利用Hadoop HDFS作為其檔案儲存系統;Google執行MapReduce來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。

Hbase 特性


● 大表:數十億行*數百萬列*數千個版本 = TB級或PB級的儲存

● 面向列:面向列(族)的儲存和許可權控制,列(族)獨立檢索。

● 稀疏:對於為空(null)的列,並不佔用儲存空間,因此,表可以設計的非常稀疏。

● 資料多版本:每個單元中的資料可以有多個版本,預設情況下版本號自動分配,是單元格插入時的時間戳;

● 資料型別單一:Hbase中的資料都是字串,沒有型別

HBase系統架構

HBase中的元件包括Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等,HBase中的每張表都透過行鍵按照一定的範圍被分割成多個子表(HRegion),預設一個HRegion超過256M就要被分割成兩個,這個過程由HRegionServer管理,而HRegion的分配由HMaster管理。

相關名詞介紹


RowKey:是Byte array,是表中每條記錄的“主鍵”,方便快速查詢,Rowkey的設計非常重要。表中的行根據行的鍵值進行排序,資料按照RowKey的字典序排序儲存

Column Family:列族,擁有一個名稱(string),包含一個或者多個相關列。列族須作為表樣式(schema)定義的一部分預先定義。如create ‘alarmInfo’ ,’i’

Column:屬於某一個columnfamily,familyName:columnName,每條記錄可動態新增

Version Number:型別為Long,預設值是系統時間戳,可由使用者自定義

Value(Cell):由{row key, column(= +

HBase邏輯模型

HBase以表的形式儲存資料。表有行和列組成。列劃分為若干個列族(row family)

Hbase 物理模型


 Table中所有行都按照row key的字典序排列;Table在行的方向上分割為多個Region;Region按大小分割的,每個表開始只有一個region,隨著資料增多,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region,之後會有越來越多的region;Region是Hbase中分散式儲存和負載均衡的最小單元,不同Region分佈到不同RegionServer上。


Region雖然是分散式儲存的最小單元,但並不是儲存的最小單元。Region由一個或者多個Store組成,每個store儲存一個columns family;每個Strore又由一個memStore和0至多個StoreFile組成,StoreFile包含HFile;memStore儲存在記憶體中,StoreFile儲存在HDFS上。

Hbase 請求過程

HBase是一個分散式資料庫,因此一張表的資料可能會分佈在不同的節點中。需要註意的是 region是Hbase分散式儲存的最小單位,但region不是HBase儲存的最小單位。在HBase中,一張表會被根據行鍵值的範圍劃分為幾個region,然後不同的region將會放在不同的region伺服器上,被伺服器上的HRegionServer 所管理和維持。

因此我們可以推斷出,當我們傳送一個查詢(插入、刪除)請求時,首先客戶端能根據請求中的行鍵值去確定該行鍵值應該儲存在哪一個region上,並且該region在哪一個region伺服器上(該查詢過程主要使用-ROOT-表、和.meta表,當定位到操作的region伺服器的位置以後,客戶端(Client)會將該操作傳送到region伺服器上,然後請求操作可能會被直接執行,也可能會進入任務佇列等待

Hbase 與RDBMS對比

為什麼採用HBase?

HBase 不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫.所謂非結構化資料儲存就是說HBase是基於列的而不是基於行的樣式,這樣方面讀寫你的大資料內容。

HBase是介於Map Entry(key & value)和DB Row之間的一種資料儲存方式。就點有點類似於現在流行的Memcache,但不僅僅是簡單的一個key對應一個 value,你很可能需要儲存多個屬性的資料結構,但沒有傳統資料庫表中那麼多的關聯關係,這就是所謂的鬆散資料。

簡單來說,你在HBase中的表建立的可以看做是一張很大的表,而這個表的屬性可以根據需求去動態增加,在HBase中沒有表與表之間關聯查詢。你只需要 告訴你的資料儲存到Hbase的那個column families 就可以了,不需要指定它的具體型別:char,varchar,int,tinyint,text等等。但是你需要註意HBase中不包含事務此類的功 能。



●本文編號282,以後想閱讀這篇文章直接輸入282即可

●輸入m獲取文章目錄

推薦↓↓↓

大資料與人工智慧

更多推薦18個技術類公眾微信

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖