用大白話講大數據HBase,老劉真的很用心(1)

老劉今天覆習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知識點的第一部分,老劉儘可能用大白話講這些知識點講述出來了,若是還有疑問,能夠聯繫公衆號:努力的老劉。

最後但願今天講的內容對大數據感興趣的同窗有幫助,也但願可以獲得你們的批評和指點。以爲寫得還行的,給老劉點個贊!

相關文章
相關標籤/搜索