Hbase知識、shell、api

產生背景

標題

最早以前各大公司都使用hadoop作爲大數據存儲,並使用MapReduce做存儲,它擅長存儲各種龐大的數據,任意結構的數據都能存儲。

Hadoop的限制

hadoop只能批量處理數據,且只能順序訪問數據。即搜索一個龐大的數據集需要從頭搜到尾。

hadoop的特點

對於任意格式的數據,hadoop可以做到安全存儲,但對於龐大數據單條的增刪改查是做不到的。

Hive的特點

可以使用Hql進行各種select 或者insert等操作,但是hive還是不支持單條數據的增刪改查操作。
總結:
(1) 海量數據存儲成爲瓶頸,單臺機器無法進行負載大量數據。
(2)單臺機器io讀寫請求成爲海量數據存儲時候高併發大規模請求的瓶頸
(3)隨着數據規模越來越大,大量業務考慮橫向擴展,使得存儲服務可以增加/刪除。

Hbase

Hbase是Apache hadoop的數據庫,是建立在hdfs之上,被設計用來提供高可靠、高性能、高存儲、可伸縮、多版本的NoSQL的分佈式數據存儲系統,實現對大數據實時、隨機的讀寫訪問。

Hbase依賴hdfs做底層數據存儲,
Hbase依賴於MapReduce做數據計算
Hbase依賴於Zookeeper做服務協調

Hbase的特點

(1)高併發來擴展和解決海量數據集的隨機實時增刪改查
(2)Hbase本質還是K-V數據庫,查詢功能簡單,不支持join等複雜連接操作。
(3)不支持複雜事務,只支持行級事務
(4)Hbase中支持的數據類型:byte[](所有底層數據的存儲都是字節數組)
(5)主要用來存儲結構化和半結構化的鬆散數據

Hbase表中數據特點

一個表可以有上十億行,上百萬列
列可以靈活指定,對列簇單獨檢索
對於空(null)的列 不佔用存儲空間,因爲表的設計可以非常稀疏。

Hbase行鍵(Rowkey)

與NoSQL數據庫一樣,rowkey等同於key(主鍵),訪問Hbase table中的行有三種方式:
1.通過單個rowkey訪問
2.通過rowkey的範圍
3.全盤掃描

rowkey行鍵可以是任意字符串(最大長度64kb),最好是16以內。Rowkey保存爲字節數組。Hbase會對錶中數據按照rowkey排列(字典順序)。

列簇(Column Family)

HBase 表中的每個列,都歸屬與某個列簇。列簇是表的 Schema 的一部分(而列不是),必須
在創建表的時候指定。指定好了列簇就不能更改。列簇可以增加或者刪除,刪除的時候會刪
除這個列簇中的所有數據

列名都以列簇作爲前綴。例如 info:history,info:math 都屬於 info 這個列簇。
訪問控制、磁盤和內存的使用統計等都是在列簇層面進行的。

列簇越多,在取一行數據時所要參與 IO、搜尋的文件就越多,所以,如果沒有必要,不要
設置太多的列簇,官網推薦是小於等於 3(最好就一個列簇)

時間戳(TimeStamp)

HBase 中通過 RowKey 和 Column 確定的爲一個存儲單元稱爲 Cell。每個 Cell 都保存着同一份
數據的多個版本。版本通過時間戳來索引。時間戳的類型是 64 位整型。時間戳可以由 HBase
(在數據寫入時自動)賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶
顯式賦值。如果應用程序要避免數據版本衝突,就必須自己生成具有唯一性的時間戳。每個
Cell 中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。HBase 在查詢的時
候,默認返回最新版本/最近的數據。如果需要讀取舊版本的數據,可以指定時間戳

爲了避免數據存在過多版本造成的的管理(包括存儲和索引)負擔,HBase 提供了兩種數據版
本回收方式:
保存數據的最後 n 個版本
保存最近一段時間內的版本(設置數據的生命週期 TTL)。
用戶可以針對每個列簇進行設置。

單元格(Cell)

由{RowKey, Column( = + ), Version} 唯一確定的單元。

Hbase使用場景

1、半結構化或非結構化數據
2、記錄稀疏
3、多版本數據
4、超大數據量的隨機、實時讀寫
5、查詢簡單

Hbase集羣結構

Region:

是 HBase 將一個表中的所有數據按照 RowKey 的不同範圍進行切割的邏輯單元,每 個 Region 負責一定範圍數據的讀寫訪問。Region 由 RegionServer 負責管理。HBase 中的 Region
的概念就和 HDFS 中的數據塊的概念差不多,Region 是 HBase 表切分出來的一個分片。數據
塊是 HDFS 中的一個大文件切分出來的一個分片。

HMaster:

HBase 的主節點,負責整個集羣的狀態感知、負載分配、負責用戶表的元數據
(schema)管理(可以配置多個用來實現 HA),HMaster 負載壓力相對於 HDFS 的 NameNode
會小很多。HBase 的 HMaster 其實就算是宕機一段時間也可以正常對外提供服務的(要搞清
楚爲什麼)。

RegionServer:

HBase 中真正負責管理 Region 的服務器,也就是負責爲客戶端進行表數據讀
寫的服務器。每一臺 RegionServer 會管理很多的 Region,一個 RegionServer 上面管理的所有
的region不屬於同一張表。負責Region的拆分,負責和底層的HDFS的存儲交互,負責StoreFile
的合併。

ZooKeeper:

整個 HBase 中的主從節點協調,元數據的入口,主節點之間的選舉,集羣節點
之間的上下線感知……都是通過 ZooKeeper 來實現

HDFS:

用來存儲 HBase 的系統文件,或者表的 Region 文件

Client:

Client 包含了訪問 HBase 的接口,另外 Client 還維護了對應的 Cache 來加速 HBase 的
訪問,比如 Cache 的.META.元數據的信息。

Hbase shell

1、list 顯示數據庫中所有的表
2、create 創建表
exp:
create ‘userInfo’,‘info’ 創建表名爲userInfo,列簇爲info的表
3、desc ‘userInfo’ 查看錶結構
4、put 插入數據
exp:
put ‘userInfo’,‘rk’,‘info:name’,‘ll’ 向userInfo表中插入 rowkey=rk cf=name value=ll
5、查詢
get ‘userInfo’,‘rk’
獲取userinfo表中 rowkey=rk所有信息
get ‘userInfo’,‘rk’,‘info:name’ 獲取userinfo表中 rowkey=rk info:name所有信息

scan ‘userinfo’ 查詢userInfo所有數據
scan ‘user_info’, {COLUMNS => ‘base_info:name’} 查詢 user_info 表中的指定列簇的所有信息

刪除記錄
delete ‘user’, ‘rk0001’

添加兩個列簇 f2 和 f3
alter ‘user_info’, NAME => ‘f2’

清空 user 表中的數據
truncate ‘user’

首先停用 user 表
disable ‘user’
啓用表
enable ‘user’

刪除表
disable 'user
drop ‘user’

過濾器
get ‘user’, ‘rk0001’, {FILTER => “ValueFilter(=, ‘binary:中國’)”}
get ‘user’, ‘rk0001’, {FILTER => “(QualifierFilter(=,‘substring:a’))”}
scan ‘user’, {COLUMNS => [‘info’, ‘data’], FILTER => “(QualifierFilter(=,‘substring:a’))”}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章