Hadoop大資料實戰系列文章之HBase
HBase – Hadoop Database,是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用 HBase 技術可在廉價 PC Server 上搭建起大規模結構化儲存叢集。
本章內容:
1) Hbase 簡介
2) Hbase 資料模型
3) Hbase 基礎原理
4) Hbase 系統架構
5) Hbase 基礎操作
1. Hbase 簡介
HBase 是 Apache Hadoop 中的一個子專案,Hbase 依託於 Hadoop 的 HDFS 作為最基本儲存基礎單元,透過使用hadoop的DFS工具就可以看到這些這些資料儲存資料夾的結構,還可以透過 Map/Reduce 的框架(演算法)對 HBase 進行操作。
上圖描述了 Hadoop EcoSystem 中的各層系統,其中 HBase 位於結構化儲存層,Hadoop HDFS 為 HBase 提供了高可靠性的底層儲存支援,Hadoop MapReduce 為HBase提供了高效能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制。
Hbase 適用場景:
1) 大資料量儲存,大資料量高併發操作
2) 需要對資料隨機讀寫操作
3) 讀寫訪問均是非常簡單的操作
Hbase 與 HDFS 對比:
兩者都具有良好的容錯性和擴充套件性,都可以擴充套件到成百上千個節點;
HDFS 適合批處理場景,但不支援資料隨機查詢,不適合增量資料處理,不支援數
據更新
2. Hbase 資料 模型
HBase 以表的形式儲存資料。表由行和列族組成。列劃分為若干個列族(row family),其邏輯檢視如下:
幾個關鍵概念:
1) 行鍵(RowKey)
行鍵是位元組陣列, 任何字串都可以作為行鍵;
表中的行根據行鍵進行排序,資料按照 Row key 的位元組序(byte order)排序儲存;
所有對錶的訪問都要透過行鍵 (單個RowKey訪問,或RowKey範圍訪問,或全表掃描)
2) 列族(ColumnFamily)
CF 必須在表定義時給出
每個 CF可以有一個或多個列成員(ColumnQualifier),列成員不需要在表定義時給出,新的列族成員可以隨後按需、動態加入
資料按CF分開儲存,HBase所謂的列式儲存就是根據CF分開儲存(每個CF對應一個 Store),這種設計非常適合於資料分析的情形
3) 時間戳(TimeStamp)
每個 Cell 可能又多個版本,它們之間用時間戳區分
4) 單元格(Cell)
Cell 由行鍵,列族:限定符,時間戳唯一決定
Cell 中的資料是沒有型別的,全部以位元組碼形式儲存
5) 區域(Region)
HBase 自動把表水平(按 Row)劃分成多個區域(region),每個 region 會儲存一個表裡面某段連續的資料;
每個表一開始只有一個 region,隨著資料不斷插入表,region 不斷增大,當增大到一個閥值的時候,region 就會等分會兩個新的 region;
當 table 中的行不斷增多,就會有越來越多的 region。這樣一張完整的表被儲存在多個 Region 上。
Region雖然是分散式儲存的最小單元,但並不是儲存的最小單元。Region由一個或者多個Store組成,每個store儲存一個columns family;每個Strore又由一個 memStore 和 0 至多個 StoreFile 組成,StoreFile 包含 HFile;memStore 儲存在記憶體中,StoreFile 儲存在 HDFS 上。
3. Hbase 架構 及 基本元件
從上圖看到 HBase 的基本元件:
1) Client:
包含訪問HBase的介面,並維護cache來加快對HBase的訪問,比如region的位置資訊。
2) Master
為 Region server 分配 region
負責 Region server 的負載均衡
發現失效的 Region server 並重新分配其上的region
管理使用者對 table 的增刪改查操作
3) Region Server
Regionserver 維護 region,處理對這些 region 的 IO 請求
Regionserver 負責切分在執行過程中變得過大的 region
4) Zookeeper 作用
透過選舉,保證任何時候,叢集中只有一個Master,Master與RegionServers啟動時會向 ZooKeeper 註冊
儲存所有 Region 的定址入口
實時監控 Region server 的上線和下線資訊,並實時通知給 Master
儲存 HBase 的 schema 和 table 後設資料
預設情況下,HBase 管理 ZooKeeper 例項,比如, 啟動或者停止ZooKeeper
Zookeeper 的引入使得 Master 不再是單點故障
4. Hbase 容錯 與 恢復
每個HRegionServer中都有一個HLog物件,HLog是一個實現Write Ahead Log的類,在每次使用者操作寫入 MemStore 的同時,也會寫一份資料到 HLog 檔案中(HLog 檔案格式見後續),HLog 檔案定期會滾動出新的,並刪除舊的檔案(已持久化到 StoreFile 中的資料)。當 HRegionServer 意外終止後,HMaster會透過 Zookeeper感知到,HMaster首先會處理遺留的 HLog 檔案,將其中不同 Region 的 Log 資料進行拆分,分別放到相應region的目錄下,然後再將失效的region重新分配,領取到這些region的HRegionServer在 Load Region 的過程中,會發現有歷史 HLog 需要處理,因此會 Replay HLog 中的資料到 MemStore 中,然後 flush 到 StoreFiles,完成資料恢復
Hbase 容錯性:
1) Master 容錯:Zookeeper 重新選擇一個新的 Master
無 Master 過程中,資料讀取仍照常進行;
無 master 過程中,region 切分、負載均衡等無法進行;
2) RegionServer 容錯:定時向 Zookeeper彙報心跳,如果一旦時間內未出現心跳,Master 將該 RegionServer 上的 Region 重新分配到其他 RegionServer 上,失效伺服器上“預寫”日誌由主伺服器進行分割並派送給新的 RegionServer
3) Zookeeper容錯:Zookeeper是一個可靠地服務,一般配置3或5個Zookeeper例項
Region 定位流程:
尋找 RegionServer 過程:ZooKeeper--> -ROOT-(單 Region)--> .META.--> 使用者表
1) -ROOT-
表包含.META.表所在的 region 列表,該表只會有一個 Region;
Zookeeper 中記錄了-ROOT-表的 location。
2) .META.
表包含所有的使用者空間 region 列表,以及 RegionServer 的伺服器地址。
5. Hbase 基礎操作
1) 進入 hbase shell console
$HBASE_HOME/bin/hbase shell
表的管理:
2) 檢視有哪些表
list
3) 建立表
# 語法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例如:建立表 t1,有兩個 family name:f1,f2,且版本數均為 2
> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}
4) 刪除表
# 分兩步:首先 disable,然後 drop
# 例如:刪除表 t1
> disable 't1'
> drop 't1'
5) 檢視錶的結構
# 語法:describe <table>
# 例如:檢視錶 t1 的結構
> describe 't1'
6) 修改表結構
# 修改表結構必須先 disable
# 語法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
# 例如:修改表 test1 的 cf 的 TTL 為 180 天
> disable 'test1'
> alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
> enable 'test1'
許可權管理:
1) 分配許可權
# 語法 : grant <user> <permissions> <table> <column family> <column qualifier> 引數
後面用逗號分隔
# 許可權用五個字母表示: "RWXCA".
# READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
# 例如,給使用者‘test'分配對錶 t1 有讀寫的許可權,
> grant 'test','RW','t1'
2) 檢視許可權
# 語法:user_permission <table>
# 例如,檢視錶 t1 的許可權列表
> user_permission 't1'
3) 收回許可權
# 與分配許可權類似,語法:revoke <user> <table> <column family> <column qualifier>
# 例如,收回 test 使用者在表 t1 上的許可權
> revoke 'test','t1'
表資料的增刪改查:
1) 新增資料
# 語法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:給表 t1 的新增一行記錄:rowkey 是 rowkey001,family name:f1,column name:
col1,value:value01,timestamp:系統預設
> put 't1','rowkey001','f1:col1','value01'
2) 查詢資料——查詢某行記錄
# 語法:get <table>,<rowkey>,[<family:column>,....]
# 例如:查詢表 t1,rowkey001 中的 f1 下的 col1 的值
> get 't1','rowkey001', 'f1:col1'
# 或者:
> get 't1','rowkey001', {COLUMN=>'f1:col1'}
# 查詢表 t1,rowke002 中的 f1 下的所有列值
hbase(main)> get 't1','rowkey001'
3) 查詢資料——掃描表
# 語法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}
# 另外,還可以新增 STARTROW、TIMERANGE 和 FITLER 等高階功能
# 例如:掃描表 t1 的前 5 條資料
> scan 't1',{LIMIT=>5}
4) 查詢表中的資料行數
# 語法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL 設定多少行顯示一次及對應的 rowkey,預設 1000;CACHE 每次去取的快取區大
小,預設是 10,調整該引數可提高查詢速度
# 例如,查詢表 t1 中的行數,每 100 條顯示一次,快取區為 500
> count 't1', {INTERVAL => 100, CACHE => 500}
5) 刪除資料——刪除行中的某個列值
# 語法:delete <table>, <rowkey>, <family:column> , <timestamp>,必須指定列名
# 例如:刪除表 t1,rowkey001 中的 f1:col1 的資料
> delete 't1','rowkey001','f1:col1'
6) 刪除資料——刪除行
# 語法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,
刪除整行資料
# 例如:刪除表 t1,rowk001 的資料
> deleteall 't1','rowkey001'
7) 刪除資料——刪除表中的所有資料
# 語法: truncate <table>
# 其具體過程是:disable table -> drop table -> create table
# 例如:刪除表 t1 的所有資料
> truncate 't1'
Region 管理:
1) 移動 Region
# 語法:move 'encodeRegionName', 'ServerName'
# encodeRegionName 指的 regioName 後面的編碼,ServerName 指的是 master-status 的
Region Servers 列表
# 示例
>move '4343995a58be8e5bbc739', 'db-41.xxx.xxx.org,60020,139'
2) 開啟/關閉 region
# 語法:balance_switch true|false
hbase(main)> balance_switch
3) 手動 split
# 語法:split 'regionName', 'splitKey'
4) 手動觸發 major compaction
#語法:
#Compact all regions in a table:
> major_compact 't1'
#Compact an entire region:
> major_compact 'r1'
#Compact a single column family within a region:
> major_compact 'r1', 'c1'
#Compact a single column family within a table:
> major_compact 't1', 'c1'
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69942496/viewspace-2733416/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hadoop大資料實戰系列文章之HiveHadoop大資料Hive
- Hadoop大資料實戰系列文章之ZookeeperHadoop大資料
- Hadoop大資料實戰系列文章之安裝HadoopHadoop大資料
- Hadoop大資料實戰系列文章之Mapreduce 計算框架Hadoop大資料框架
- Hadoop大資料實戰系列文章之HDFS檔案系統Hadoop大資料
- Hadoop大資料平臺之HBase部署Hadoop大資料
- 大資料之 ZooKeeper原理及其在Hadoop和HBase中的應用大資料Hadoop
- 大資料時代之hadoop(六):hadoop 生態圈(pig,hive,hbase,ZooKeeper,Sqoop)大資料HadoopHive
- 小丸子學Hadoop系列之——部署Hbase叢集Hadoop
- 《Hadoop+Spark大資料分析實戰》簡介HadoopSpark大資料
- Hadoop系列之HDFS 資料塊Hadoop
- 小白學習大資料測試之hadoop hdfs和MapReduce小實戰大資料Hadoop
- Maven實戰系列文章Maven
- 大資料學習系列之八----- Hadoop、Spark、HBase、Hive搭建環境遇到的錯誤以及解決方法大資料HadoopSparkHive
- 如何使用HBase?大資料儲存的兩個實戰場景大資料
- 大資料實戰之hadoop生態概況和官網文件解讀大資料Hadoop
- HBase BulkLoad批量寫入資料實戰
- 小丸子學Hadoop系列之——hbase備份與恢復Hadoop
- Hadoop2.7實戰v1.0之HBase1.1.5 HA分散式搭建Hadoop分散式
- Hadoop元件--分散式資料庫HbaseHadoop元件分散式資料庫
- Hadoop大資料探勘從入門到進階實戰Hadoop大資料
- 大資料實戰之環境搭建(八)大資料
- 大資料時代之hadoop(一):hadoop安裝大資料Hadoop
- 大資料時代之hadoop(三):hadoop資料流(生命週期)大資料Hadoop
- 大資料測試之hadoop初探大資料Hadoop
- 大資料——HBase基礎大資料
- 大資料技術 - Hbase大資料
- HBase載入大資料大資料
- 基於Hadoop大資料分析應用場景與實戰Hadoop大資料
- Hadoop系列001-大資料概論Hadoop大資料
- 大資料之hadoop / hive / hbase 的區別是什麼?有什麼應用場景?大資料HadoopHive
- 大資料時代之hadoop(二):hadoop指令碼解析大資料Hadoop指令碼
- 大資料學習之Hadoop如何高效處理大資料大資料Hadoop
- 使用Hadoop+Hbase+Hive+SpringBatch實現資料倉儲HadoopHiveSpringBAT
- 大資料之 Hadoop學習筆記大資料Hadoop筆記
- Hadoop大資料平臺之Kafka部署Hadoop大資料Kafka
- spring-hadoop之操作hbaseSpringHadoop
- Hadoop 學習之-HBase安裝Hadoop