HBase基礎以及shell命令實踐
HBase是一個高可靠、高效能、面向列、可伸縮的分散式資料庫,是谷歌BigTable的開源實現,主要用來儲存非結構化和半結構化的鬆散資料。HBase的目標是處理非常龐大的表,可以通過水平擴充套件的方式,利用廉價計算機叢集處理由超過10億行資料和數百萬列元素組成的資料表。
一.HBase基礎
1.資料模型相關概念
1.表:由行和列組成,列劃分為若干個列族。
2.行:每個HBase表由若干行組成,每個行由行鍵來標識。
3.列族:基本的訪問控制單元,在建立時就定義好,數量不宜太多。
4.列限定符:列族離的資料通過列限定符來定位。
5.單元格:在HBase表中,通過行、列族和列限定符確定一個單元格。每個單元格可以儲存一個數據的多個版本,每個版本對應一個不同的時間戳。
6.時間戳:每個單元格都儲存著同一份資料的多個版本,這些版本採用時間戳進行索引。
2.資料座標
在圖4-2中,由行鍵"201505003"、列族"info"、列限定符"email"和時間戳"1174184620720"這四個座標值確定的單元格["201505003","info","email",1174184620720],裡面儲存的值是"[email protected]"。前者相當於一個鍵,後者相當於一個值。
3. HBase的實現原理
3.1HBase的功能元件
HBase的實現包括3個主要的功能元件:庫函式,連結到每個客戶端;一個Master主伺服器,許多個Region伺服器。Region伺服器負責儲存和維護分配給自己的Region,處理來自客戶端的讀寫請求。主伺服器Master負責管理和維護HBase表的分割槽資訊。
客戶端並不是直接從Master主伺服器上讀取資料,而是在獲得Region的儲存位置資訊後,直接從Region伺服器上讀取資料。特別地,HBase客戶端並不直接依賴於Master、而是藉助於ZooKeeper來獲得Region的位置資訊的。
3.2 表和Region
當表中的行的數量非常大時,無法儲存在一臺機器上,需要分佈儲存到多臺機器上。需要根據行鍵的值對錶中的行進行分割槽,每個行區間構成一個分割槽,被稱為"Region",包含了位於某個值域區間內的所有資料,它是負載均衡和資料分發的基本單位。
Master主伺服器會把不同的Region分配到不同的Region伺服器上。每個Region伺服器負責管理一個Region集合,通常在每個Region伺服器上,會放置10~1000個Region。
3.3Region的定位
每個Region識別符號,就可以唯一標識每個Region,一個Region識別符號就可以表示成"表名+開始主鍵+RegionId"。
客戶端訪問使用者資料之前,需要首先訪問ZooKeeper,獲取-ROOT-表的位置資訊,然後訪問-ROOT-表,獲得.META表的資訊,接著訪問.META.表,找到所需的Region具體位於哪個Region伺服器。最後才會到該Region伺服器讀取資料。
4.HBase執行機制
4.1HBase系統架構
ZooKeeper伺服器:每個Region伺服器都需要到ZooKeeper中進行註冊,ZooKeeper會實時監控每個Region伺服器的狀態並通知給Master,這樣,Master就可以通過ZooKeeper隨時感知到各個Region伺服器的工作狀態。ZooKeeper還會選舉一個Master作為叢集的總管,並保證在任何時刻總有唯一一個Master在執行,避免單點問題。
Master:主伺服器主要進行維護表和Region的元資料資訊,負載很低。
4.2 Region伺服器的工作原理
Region伺服器內部管理了一系列Region物件和一個HLog檔案,其中,HLog是磁碟上面的記錄檔案,它記錄著所有的更新操作。每個Region物件又是由多個Store組成的,每個Store對應了表中的一個列族的儲存。每個Store又包含了一個MemStore和若干個StoreFile,其中,MemStore是在記憶體中的快取,儲存最近更新的資料,StoreFile在底層的實現方式就是HDFS檔案系統的HFile,HFile的資料塊通常採用壓縮方式儲存,壓縮之後可以大大減少網路I/O和磁碟I/O。
4.3 Store工作原理
每個Store對應表中的一個列族的儲存。每個Store包含一個MemStore快取和若干個StoreFile檔案。MemStore快取滿時,就會重新整理到磁碟中的一個StoreFile檔案中。當StoreFile數量達到設定數量就會合併成一個StoreFile檔案,當檔案大小到達一定閾值就會觸發檔案分裂。
4.4 HLog的工作原理
如果一個Region伺服器發生故障,ZooKeeper會通知Master。Master首先會處理該故障Region伺服器上面的遺留的HLog檔案,由於一個Region伺服器上面可能會維護著多個Region物件。系統會根據每條日誌記錄所屬的Region物件對HLog資料進行拆分,分別方法哦相應Region物件的目錄下,然後再將失效的Region重新分配到可用的Region伺服器中,並把與該Region物件相關的HLog的HLog日誌記錄也傳送給相應的Region伺服器(重新拆分HLog併發送到新的Region伺服器)
二.HBase常見的shell指令
1.create:建立表
1.建立表school,建立多個列族
2.建立表class,列族為classinfo,版本為5.
3.建立表 t2,將表依據分割演算法HexStringSplit分佈在15個Region裡。
4. 建立表t1,指定切分點。
2.list:列出HBase中所有表的資訊
3.put:向表、行、列指定的單元格新增資料
向表class中新增行u20160101,列classinfo:classname,新增資料class 1,時間戳為1421822284898.
4.get:通過指定表名、行、列、時間戳、時間範圍和版本號來獲得相應單元格的值
獲取表class,行u20160101,列classinfo:classname的值
獲取表class,行u20160102,列為classinfo:classname,時間範圍在[1544876029000,1544876029900]的資料
5.scan:瀏覽表的相關資訊
可以通過TIMERANGE、FILTER、LIMIT、STARTROW、STOPROW、TIMESTAMP、MAXLENGTH、COLUMNS、CACHE來限定所需要瀏覽的資料。
6.alter:修改列族模式
向表class新增列族classmanager。並對列族classmanager新增資料
刪除表class中的列族classmanager,並用scan命令檢查,下圖所示,刪除命令與新增列族命令相似,只是多了一個METHOD屬性,刪除之後,通過scan命令可知classmanager列族不存在。
7.count:統計表中的行數
命令:count 表名
8.describe:顯示錶的資訊
describe 表名
9. disable:使表失效 ,失效之後表存在,但是無法對錶進行查詢 exists:判斷表是否存在 enable:使表有效
10.delete:刪除單元格資料
11.drop:刪除表
注意:刪除表之前需要將表失效,否則無法刪除