老劉今天覆習HBase知識發現不少資料都沒有把概念說清楚,有不少專業名詞一筆帶過沒有解釋。好比這個框架高性能、高可用,那什麼是高性能高可用?怎麼實現的高性能高可用?沒說!node
若是面試官聽了你說的,會有什麼反應?個人感受就是你說的東西都是別人的,沒有本身的理解。因此老劉纔會寫用大白話講大數據這個系列,就是爭取把東西講清楚,講明白!若是以爲老劉寫得不錯,給老劉點個贊吧!面試
01 HBase知識點shell
第1點:HBase的定義數據庫
官網畫紅框中直接就說,HBase是一個分佈式、可擴展的大數據存儲Hadoop數據庫。試想下,你是面試官,別人這樣回答你,你會不會滿意?老劉以爲學的東西要用本身的話講出來,纔是真正的掌握。編程
在老劉看來,HBase,即Hadoop database,即Hadoop數據庫。它的數據一般存儲在HDFS上,HDFS爲HBase提供了高可靠性的底層存儲的支持;利用Hadoop MapReduce來處理HBase中的海量數據,爲HBase提供了高性能的計算能力;利用ZooKeeper爲HBase提供了穩定的服務。數組
根據上述所說,就能夠總結爲HBase是一個創建在HDFS之上,具備高可靠、高性能、可擴展、支持海量數據存儲的分佈式數據庫。服務器
通常是在存儲數據比較大的時候,而且對讀寫性能要求比較高的時候,纔會用到HBase數據庫。架構
那大家知道什麼是讀寫性能比較高嗎?那就是讀的比較快、寫的也比較快的時候,纔是讀寫性能比較高!併發
第2點:HBase的特色負載均衡
1)極易擴展
HBase底層依賴HDFS,當磁盤空間不足的時候,咱們只須要動態增長DataNode節點就能夠了。固然也能夠經過增長服務器來對集羣的存儲進行擴容。
2)海量存儲
能夠存儲大批量的數據。在存儲海量數據的前提下,能在幾十到百毫秒內返回數據。這點和HBase的極易擴展性很是相關。正由於HBase良好的擴展性,才爲海量數據的存儲提供了便利。
3)列式存儲(這裏必定要搞清楚列式存儲和行式存儲的區別)
這裏的列式存儲其實說的是列族存儲,HBase是根據列族來存儲數據的。列族下面能夠有很是多的列,列族在建立表的時候就必需要指定了。
4)稀疏
稀疏主要是針對HBase列的靈活性,在列族中,你能夠指定任意多的列,在列數據爲空的狀況下,是不會佔用存儲空間的。
5)數據類型單一
它全部的數據都是以字節數組進行存儲。
第3點:HBase表的數據模型
先給出一張HBase的設計表,根據這張表進行介紹表的結構。
rowkey行鍵
1)它是表(table)的主鍵,table中的記錄按照rowkey的字典序進行排序,這裏就必需要說說什麼是字典序?
有多機構的資料就是一筆帶過,一點也不負責,讓人很是不爽。老劉就不得不去搜搜字典序排序的相關知識。
通俗地講,字典序排序大概就是兩個做比較的內容從第一個字母開始比較,按照ASCII碼錶比較大小,小的放在前面,第一個相同就比較下一個,都相同且一個比較完了,則短的排在前面。
常見ASCII碼的大小規則:0~9<A~Z<a~z
2)rowkey行鍵它能夠是任意的字符串,其中它的最大長度是 64KB,實際應用中長度通常爲 10-100bytes。
Column Family列族
1)HBase表中的每一個列,都歸屬於某個列族。
2)列族是表的schema的一部分(而列不是),即建表時至少指定一個列族。
3)好比咱們建立user表,包含info、data兩個列族,代碼就爲create 'user', 'info', 'data'。Column列列確定是表的某一個列族下的一個列,用列族名:列名錶示,好比`info`列族下的`name`列,就表示爲`info:name`。
Cell單元格
如上圖,咱們經過指定rowkey行鍵、列族、列,就能夠肯定的一個Cell單元格。在Cell中的數據是沒有任何類型的,所有都是以字節數組的形式進行存儲的。
Timestamp時間戳
這個說的就是能夠對錶中的Cell屢次賦值,每次賦值操做時的時間戳timestamp,可當作Cell值的版本號version number。也就是一個Cell能夠有多個版本的值的意思。
第4點:HBase架構
從圖中能夠看出,這是一個很是典型的主從架構。
下面詳細說下各個組件:
Client客戶端
Client它是操做HBase集羣的入口,利用Client,在經過RPC與HMaster進行通訊,能夠完成表的增、刪、改操做。也能夠經過RPC與RegionServer通訊,完成讀寫表數據的操做。
通常咱們能夠利用HBase shell或者Java API進行編程,完成上述表的操做。
ZooKeeper集羣
ZooKeeper是什麼有什麼用,老劉已經在ZooKeeper框架那篇文章中詳細講解了,你們能夠去看看。那它在HBase集羣中的做用,就很是明顯了,① 它實現了HMaster的高可用,多HMaster間進行主備選舉。② 保存了HBase的元數據信息meta表。③ 對HMaster和HRegionServer各個節點進行監控。
HMaster
HBase集羣也是主從架構,HMaster是主角色,是集羣的老大,主要負責管理表和Region。
那它管理表和Region作一些什麼呢?
1)管理Client對錶的增刪改的一些操做;
2)管理Region的操做就會比管理Client多一點。當Region分裂後,負責新Region分配到指定的HRegionServer上;當HRegionServer宕機後,負責其上的region的遷移;以及管理HRegionServer之間的負載均衡。
那你們有沒有了解負載均衡,什麼是負載均衡?
舉個例子,一個網站最開始創建的時候,它的訪問量比較小,但當它的流量變得特別大的時候,併發量就變得特別大了,網站就會出現訪問延遲的一些現象。這個時候呢,就須要用到負載均衡了。之前這個網站是一個單一服務器,如今就能夠配置多個服務器集羣,那樣就能夠把訪問流量分發到集羣中的不一樣服務器上,這樣就大大減小了單一服務器上的壓力,也就是負載均衡想要作的事。
HRegionServer
它是HBase集羣中從角色,是集羣中的小弟。它主要負責響應客戶端的讀寫數據請求,以及負責管理一系列的Region。
Region
它是HBase集羣中分佈式存儲的最小單元,一個Region對應一個Table表的部分數據。簡單理解就是表存儲在HBase中,而且都是以Region爲單位進行存儲。
第5點:HBase shell命令
說一些經常使用的基礎操做命令:
建立user表,包含info、data兩個列族 create 'user', 'info', 'data' 使用put命令向user表中插入信息,row key爲rk0001,列族info中添加名爲name的列,值爲zhangsan put 'user', 'rk0001', 'info:name', 'zhangsan' 獲取user表中row key爲rk0001的全部信息(即全部cell的數據) get 'user', 'rk0001' 獲取user表中row key爲rk0001,info列族的全部信息 get 'user', 'rk0001', 'info' 更新數據操做 將user表的f1列族版本數改成5 alter 'user', NAME => 'info', VERSIONS => 5 刪除數據以及刪除表操做 刪除user表row key爲rk0001,列標示符爲info:name的數據 delete 'user', 'rk0001', 'info:name' 清空表數據 truncate 'user' 刪除表 首先須要先讓該表爲disable狀態,使用命令: disable 'user' 而後使用drop命令刪除這個表 drop 'user' 注意:若是直接drop表,會報錯:Drop the named table. Table must first be disabled
再說一下HBase的高級操做命令:
顯示服務器狀態 status 'node01' 顯示HBase當前用戶 whoami 顯示當前全部的表 list 統計指定表的記錄數 count 'user' 檢查表是否存在,適用於表量特別多的狀況 exists 'user' 檢查表是否啓用或禁用 is_enabled 'user' is_disabled 'user' 禁用一張表/啓用一張表 disable 'user' enable 'user' 刪除一張表,記得在刪除表以前必須先禁用 drop
上述都是HBase shell命令的內容,還有用JAVA API進行表操做的內容,可是這部分老劉就不講解了,有須要的話,能夠聯繫老劉,我會分享給你。
02 HBase總結
今天是HBase知識點的第一部分,老劉儘可能用大白話講這些知識點講述出來了,若是還有疑問,能夠聯繫公衆號:努力的老劉。
最後但願今天講的內容對大數據感興趣的同窗有幫助,也但願可以獲得你們的批評和指點。以爲寫得還行的,給老劉點個贊!