海量數據高速存儲資料庫:HBase

HBase簡介

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

結構化存儲集群,海量數據的快速隨機訪問。

海量數據高速存儲數據庫:HBase

上圖描述了Hadoop EcoSystem中的各層系統,其中HBase位於結構化存儲層,Hadoop HDFS為HBase提供了高可靠性的底層存儲支持,Hadoop MapReduce為HBase提供了高性能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制。

此外,Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的非常簡單。 Sqoop則為HBase提供了方便的RDBMS數據導入功能,使得傳統數據庫數據向HBase中遷移變的非常方便。

Hbase是一個面向列存儲的分佈式存儲系統,它的優點在於可以實現高性能的併發讀寫操作,同時Hbase還會對數據進行透明的切分,這樣就使得存儲本身具有了水平伸縮性。

有需要大數據的學習資料的同學可以在後臺私信回覆“大數據”領取大數據學習資料一份哦~

HBase的構成

物理上來說,HBase是由三種類型的服務器以主從模式構成的。這三種服務器分別是:Region serverHBase HMasterZooKeeper

其中Region server負責數據的讀寫服務。用戶通過溝通Region server來實現對數據的訪問。

HBase HMaster負責Region的分配及數據庫的創建和刪除等操作。

ZooKeeper作為HDFS的一部分,負責維護集群的狀態(某臺服務器是否在線,服務器之間數據的同步操作及master的選舉等)。

另外,Hadoop DataNode負責存儲所有Region Server所管理的數據。HBase中的所有數據都是以HDFS文件的形式存儲的。出於使Region server所管理的數據更加本地化的考慮,Region server是根據DataNode分佈的。HBase的數據在寫入的時候都存儲在本地。但當某一個region被移除或被重新分配的時候,就可能產生數據不在本地的情況。這種情況只有在所謂的compaction之後才能解決。

NameNode負責維護構成文件的所有物理數據塊的元信息(metadata)。

HBase結構如下圖所示:

海量數據高速存儲數據庫:HBase

Regions

HBase中的表是根據row key的值水平分割成所謂的region的。一個region包含表中所有row key位於region的起始鍵值和結束鍵值之間的行。集群中負責管理Region的結點叫做Region server。Region server負責數據的讀寫。每一個Region server大約可以管理1000個region。

HBase的HMaster

HMaster負責region的分配,數據庫的創建和刪除操作。

具體來說,HMaster的職責包括:

  • 調控Region server的工作
  • 在集群啟動的時候分配region,根據恢復服務或者負載均衡的需要重新分配region。
  • 監控集群中的Region server的工作狀態。(通過監聽zookeeper對於ephemeral node狀態的通知)。
  • 管理數據庫
  • 提供創建,刪除或者更新表格的接口。

ZooKeeper

HBase利用ZooKeeper維護集群中服務器的狀態並協調分佈式系統的工作。ZooKeeper維護服務器是否存活,是否可訪問的狀態並提供服務器故障/宕機的通知。ZooKeeper同時還使用一致性算法來保證服務器之間的同步。同時也負責Master選舉的工作。需要注意的是要保證良好的一致性及順利的Master選舉,集群中的服務器數目必須是奇數。例如三臺或五臺。

HBase各組成部分之間的合作

ZooKeeper用來協調分佈式系統的成員之間共享的狀態信息。Region Server及HMaster也與ZooKeeper連接。ZooKeeper通過心跳信息為活躍的連接維持相應的ephemeral node。如下圖所示:

海量數據高速存儲數據庫:HBase

一個Region server都在ZooKeeper中創建相應的ephemeral node。HMaster通過監控這些ephemeral node的狀態來發現正常工作的或發生故障下線的Region server。HMaster之間通過互相競爭創建ephemeral node進行Master選舉。ZooKeeper會選出區中第一個創建成功的作為唯一一個活躍的HMaster。活躍的HMaster向ZooKeeper發送心跳信息來表明自己在線的狀態。不活躍的HMaster則監聽活躍HMaster的狀態,並在活躍HMaster發生故障下線之後重新選舉,從而實現了HBase的高可用性。

如果Region server或者HMaster不能成功向ZooKeeper發送心跳信息,則其與ZooKeeper的連接超時之後與之相應的ephemeral node就會被刪除。監聽ZooKeeper狀態的其他節點就會得到相應node不存在的信息,從而進行相應的處理。活躍的HMaster監聽Region Server的信息,並在其下線後重新分配Region server來恢復相應的服務。不活躍的HMaster監聽活躍HMaster的信息,並在起下線後重新選出活躍的HMaster進行服務。

Hbase訪問方式

Hbase的訪問方式

1、Native Java API:最常規和高效的訪問方式;

2、HBase Shell:HBase的命令行工具,最簡單的接口,適合HBase管理使用;

3、Thrift Gateway:利用Thrift序列化技術,支持C++,PHP,Python等多種語言,適合其他異構系統在線訪問HBase表數據;

4、REST Gateway:支持REST 風格的Http API訪問HBase, 解除了語言限制;

5、MapReduce:直接使用MapReduce作業處理Hbase數據;

6、使用Pig/hive處理Hbase數據。

HBase 基本操作

1.1 連接HBase

使用hbase shell命令來連接正在運行的Hbase實例,該命令位於HBase安裝包下的bin/目錄。HBase Shell提示符以>符號結束。

$ ./bin/hbase shellhbase(main):001:0>

1.2 顯示HBase Shell 幫助文檔

輸入help並按Enter鍵,可以顯示HBase Shell的基本使用信息,和我們接下來會列舉的一些命令類似。需要注意的是,表名,行,列都必須包含在引號內。

1.3 退出HBase Shell

使用quit命令,退出HBase Shell 並且斷開和集群的連接,但此時HBase仍然在後臺運行。

1.4 查看HBase狀態

hbase(main):024:0>status3 servers, 0 dead,1.0000 average load

1.5 關閉HBase

和bin/start-hbase.sh開啟所有的HBase進程相同,bin/stop-hbase.sh用於關閉所有的HBase進程。

$ ./bin/stop-hbase.shstopping hbase....................$

二、數據定義(DDL)操作

2.1 創建新表

使用create命令來創建一個新的表。在創建的時候,必須指定表名和列族名。

hbase(main):001:0> create 'test', 'cf'0 row(s) in 0.4170 seconds=> Hbase::Table - test

2.2 列舉表信息

使用list命令:

hbase(main):002:0> list 'test'TABLEtest1 row(s) in 0.0180 seconds=> ["test"]

2.3 獲取表描述

使用describe命令:

hbase(main):003:0> describe 't'DESCRIPTION ENABLED 't', {NAME => 'f', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_ true SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => '2 147483647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false ', BLOCKCACHE => 'true'}1 row(s) in 1.4430 seconds

2.4 刪除表

使用drop命令實現刪除表的功能:

hbase(main):011:0> drop 'test'0 row(s) in 0.1370 seconds

2.5 檢查表是否存在

hbase(main):021:0>exists 'member'Table member doesexist 0 row(s) in 0.1610seconds

三、數據管理(DML)操作

3.1 向表中插入數據

使用put命令,將數據插入表中:

hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'0 row(s) in 0.0850 secondshbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'0 row(s) in 0.0110 secondshbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'0 row(s) in 0.0100 seconds

可以看到,在本例中,一共插入了三條數據,一次一條。第一次插入到row1行,cf/:列,插入值為value1。所有列在HBase中有一個列族前綴。本例中的cf,後面跟著一個冒號還有一個列限定後綴,本例中是a。

3.2 一次性掃描全表數據

一種獲取HBase數據的方法是掃描,使用scan命令來掃描表的數據。可以限制限制掃描的範圍,在本例中,獲取的是所有的數據。

hbase(main):006:0> scan 'test'ROW COLUMN+CELL row1 column=cf:a, timestamp=1421762485768, value=value1 row2 column=cf:b, timestamp=1421762491785, value=value2 row3 column=cf:c, timestamp=1421762496210, value=value33 row(s) in 0.0230 seconds

3.3 獲取一個行數據

使用get命令來獲得某一行的數據:

hbase(main):007:0> get 'test', 'row1'COLUMN CELL cf:a timestamp=1421762485768, value=value11 row(s) in 0.0350 seconds

3.4 更新一條數據

使用put命令,本例中,將shiyanlou地址改為E

hbase(main):004:0>put 'company','shiyanlou','info:address' ,'E'0 row(s) in 0.0210secondshbase(main):005:0>get 'company','shiyanlou','info:address' COLUMN CELL  info:address timestamp=1321586571843, value=E 1 row(s) in 0.0180seconds

3.5 禁用一個表

如果你想要刪除一個表或是修改它的設置,或者是其它的情況,都需要首先禁用該表。使用disable命令禁用表,enable命令重新啟用表。

hbase(main):008:0> disable 'test'0 row(s) in 1.1820 secondshbase(main):009:0> enable 'test'0 row(s) in 0.1770 seconds


分享到:


相關文章: