您好,登錄后才能下訂單哦!
1. HBase
一個構建在HDFS上的高可靠、高性能、面向列、可伸縮、分布式列存儲開源數據庫,主要用于存儲海量數據,同時使用mapreduce處理HBase中的數據,利用zookeeper作為協同服務。讀寫相對簡單,不支持條件查詢
2. HBase與HDFS對比
都具有良好的容錯性和擴展性
HDFS適合批處理場景,但是不支持數據隨即查找,不適合增量數據處理,不支持數據更新
3. HBase的特點:
海量數據:可支持上百萬列,分成多個region
無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態的增加,同一張表中不同的行可以有截然不同的列
面向列存儲:面向列的存儲和權限控制,列獨立檢索
記錄稀疏:列為空(NULL),并不占用存儲空間
數據多版本:每個單元的數據可以有多個版本,通過timestamp區分
數據類型單一:所有數據都是字符串
4. HBase結構組成
Row key:
Byte array
表中每條記錄的“主鍵”
方便快速查找
Timestamp:
每次數據操作對應的時間戳,看作數據的version number
Column Family:
擁有一個名稱(string)
包含一個或者多個相關列(Column)
Column:
value:
5. 支持的操作
所有操作基于rowkey的
支持CRUD(create、read、update、delete)以及put、get、multiput、scan
沒有內置join操作,可使用MapReduce實現
6. HBase為每個值維護了多級索引,即<key,column family,column name,timestamp>
Table中的所有行都按照row key的字典序排列,在行的方向上分割為多個region,region是HBase中分布式存儲與負載均衡的最小單元,不同的Region分布到不同RegionServer上;
region增大到一個閥值的時候,region就會分為兩個新的region,之后會有越來越多的region
region由一個或多個store組成,每個store保存一個columns family
每個store又由一個memStore和0至多個StoreFile組成;
memStore存儲在內存中,StoreFile存儲在HDFS上
7. HBase的基本組件
Client:通過RPC與HMaster及HRegionServer進行通信,并維護cache加快對HBase的訪問
Zookeeper:
保證集群中總是存在一個HMaster
存儲所有Region的尋址入口
實時監控Region server的上線和下線信息,并實時通知給Master
存儲HBase的schema和table元數據
HMaster:
為Region server分配region
復雜Region server的負載均衡
發現失效的Region server并重新分配其上的region
管理用戶對table的增刪改查操作
HRegionServer:
維護region,處理對region的I/O請求
負責切分在運行過程中變得過大的region
8.HBase容錯機制
HMaster:zookeeper重新選擇一個新的Master
無Master過程中,數據讀取仍照常進行
無Master過程中,region切分、負載均衡等無法進行
HRegionServer容錯:定時向Zookeeper匯報心跳,如果一定時間內未出現心跳
HMaster將該HRegionServer上的Region重新分配到其他RegionServer上
失效服務器上“預寫”日志由主服務器進行分割并派送給新的RegionServer上
9. HBase訪問方式
Native Java API:常規高效
創建一個Configuration對象(包含各種配置信息hbase-default.xml,hbase-site.xml)
Configuration conf=HbaseConfiguration.create()
構建一個HTable句柄(提供Configuration對象,提供待訪問Table的名稱)
HTable table=new HTable(conf,tableName)
僅提供行級事務,嚴格的行一致性,并發讀,順序寫
執行操作(支持put,get,delete,scan等的批處理)
table.getTableName();
關閉HTable句柄(內存數據刷新到磁盤上,釋放資源)
table.close()
HBase Shell:用于管理
Thrift Gateway:序列化,支持C++,Python等語言
啟動thrift server:hbase-daemon.sh start thtift
生成Hbase thrift client接口文件
thrift --gen xxx Hbase.thrift
編寫客戶端代碼
eg:1. thrift --gen py hbase.thrift
2. ${HBASE_HOME}/src/examples/thrift/DemoClient.py
3. python DemoClient.py
Rest Gateway:Rest風格的Http API
Mapreduce:使用Mapreduce作業處理Hbase數據
提供TableMapper、TableReducer、TableInputFormat、TableOutputFormat等api
10.HBase Shell的主要用法
進入控制臺:bin/hbase shell
創建表:create TABLE_NAME,COLUMN_Family1, COLUMN_Family2,...COLUMN_FamilyN
添加記錄:put TABLE_NAME,ROW_NAME,COLUMN_Family:COLUMN_NAME,VALUE
查看記錄:get TABLE_NAME,ROW_NAME #默認返回最近的值
統計記錄數:count TABLE_NAME
刪除表:
disable TABLE_NAME
drop TABLE_NAME
刪除記錄:
delete TABLE_NAME,ROW_NAME,COLUMN_Family:COLUMN_NAME #刪除一條
delete TABLE_NAME,ROW_NAME #刪除所有
刪除一個列簇
disable TABLE_NAME
alter TABLE_NAME, {NAME=>'tab1_add', METHOD=>'delete'}
enable TABLE_NAME
全表掃描:
scan TABLE_NAME
指定列中的所有數據:scan TABLE_NAME,COLUMN_Family
查看所有表:list
查看服務器狀態:status
查看hbase版本:version
查看表結構:descirbe TABLE_NAME
判斷表是否存在:exists TABLE_NAME
判斷表是否為enable is_enabled TABLE_NAME
清空表:truncate TABLE_NAME
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。