一般操作:
hbase(main)> status
hbase(main)> version
創(chuàng)建命名空間: namespace指的是一個(gè) 表的邏輯分組 戳粒,同一組中的表有類似的用途毁涉,相當(dāng)于關(guān)系型數(shù)據(jù)庫中的database娘汞。
hbase(main):060:0> create_namespace 'test1'
drop_namespace
創(chuàng)建該命名空間的表:
hbase(main):061:0> create 'test1:test','f1','f2'
create 'scores',{NAME=>'course',VERSIONS=>2}
1)查看有哪些表 list describe
hbase(main)> list
hbase(main)> describe 'member'
2)創(chuàng)建表 create 只創(chuàng)建列族就可漫仆,put數(shù)據(jù)時(shí)直接
# 語法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例如:創(chuàng)建表t1,有兩個(gè)family name:f1坤按,f2毯欣,且版本數(shù)均為2
hbase(main)> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}
3)刪除表
分兩步:首先disable,然后drop
例如:刪除表t1
hbase(main)> disable 't1'
hbase(main)> drop 't1'
4)查看表的結(jié)構(gòu)
# 語法:describe <table>
# 例如:查看表t1的結(jié)構(gòu)
hbase(main)> describe 't1'
5)修改表結(jié)構(gòu) alter
修改表結(jié)構(gòu)必須先disable
alter 't1', {NAME => 'f1', VERSIONS => 5}
# 語法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
# 例如:修改表test1的cf的TTL為180天
hbase(main)> disable 'test1'
hbase(main)> alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
hbase(main)> enable 'test1'
6)添加數(shù)據(jù) put
# 語法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:給表t1的添加一行記錄:rowkey是rowkey001臭脓,family name:f1酗钞,column name:col1,value:value01,timestamp:系統(tǒng)默認(rèn)
hbase(main)> put 't1','rowkey001','f1:col1','value01'
用法比較單一算吩。
7)查詢數(shù)據(jù)
a)查詢某行記錄 get
# 語法:get <table>,<rowkey>,[<family:column>,....]
查詢r(jià)owkey001一行下的所有列值:
hbase(main)> get 't1','rowkey001'
# 例如:查詢表t1,rowkey001行佃扼,f1:col1列
hbase(main)> get 't1','rowkey001', 'f1:col1'
# 或者:
hbase(main)> get 't1','rowkey001', {COLUMN=>'f1:col1'}
b)掃描表
# 語法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}
# 另外偎巢,還可以添加STARTROW、TIMERANGE和FITLER等高級功能
# 例如:掃描表t1的前5條數(shù)據(jù)
hbase(main)> scan 't1',{LIMIT=>5}
test1空間下的test表的columns=f1的所有行
hbase(main)> scan 'test1:test',{COLUMNS=>'f1'}
test1空間下的test表的columns=f1的第1行
hbase(main)> scan 'test1:test',{COLUMNS=>'f1',LIMIT=>1}
scan 'scores',{VERSIONS=>2} version<=2
scan 'scores',{TIMERANGE=>[1394097631386,1394097651029],VERSIONS=>2}
c)查詢表中的數(shù)據(jù)行數(shù) count
# 語法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL設(shè)置多少行顯示一次及對應(yīng)的rowkey兼耀,默認(rèn)1000压昼;CACHE每次去取的緩存區(qū)大小,默認(rèn)是10瘤运,調(diào)整該參數(shù)可提高查詢速度
# 例如窍霞,查詢表t1中的行數(shù),每100條顯示一次拯坟,緩存區(qū)為500
hbase(main)> count 't1', {INTERVAL => 100, CACHE => 500}
8)刪除數(shù)據(jù)
a )刪除行中的某個(gè)列值 delete
# 語法:delete <table>, <rowkey>, <family:column> , <timestamp>,必須指定列名
# 例如:刪除表t1但金,rowkey001中的f1:col1的數(shù)據(jù)
hbase(main)> delete 't1','rowkey001','f1:col1'
注:將刪除改行f1:col1列所有版本的數(shù)據(jù)
b )刪除行 deleteall
# 語法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名郁季,刪除整行數(shù)據(jù)
# 例如:刪除表t1冷溃,rowk001的數(shù)據(jù)
hbase(main)> deleteall 't1','rowkey001'
c)刪除表中的所有數(shù)據(jù) truncate
# 語法: truncate <table>
# 其具體過程是:disable table -> drop table -> create table
# 例如:刪除表t1的所有數(shù)據(jù)
hbase(main)> truncate 't1'
9)檢查表是否存在 exists
hbase(main):019:0> exists 't1'
10)查看表是否可用 is_enabled
hbase(main):036:0> is_enabled 't1'
help
hbase(main)> create help
11).判斷表是否enable
hbase(main):034:0>is_enabled 'member'
過濾器:
0.所有的過濾器都在服務(wù)端生效
1.顯示所有過濾器
hbase(main):010:0> show_filters
2.只返回key及其他關(guān)鍵部分
scan 'airline',{ FILTER => "KeyOnlyFilter()"}
3.只返回每一行的第一個(gè)值
scan 'airline',{ FILTER => "FirstKeyOnlyFilter()"}
4.過濾rowkey 需要輸入rowkey的前綴
scan 'airline', {FILTER => "(PrefixFilter ('row2'))"}
5.過慮qualifier,需要輸入qualifier前綴
scan 'airline', {FILTER => "(PrefixFilter ('row2')) AND ColumnPrefixFilter('destination')"}
6.多重過濾qualifier梦裂,需要輸入qualifier前綴
scan 'airline',{FILTER =>"MultipleColumnPrefixFilter('source','destination','date')"}
7.返回該表中相應(yīng)的qualifier數(shù)
scan 'airline',{FILTER =>"ColumnCountGetFilter(2)"}
8.返回多少行
scan 'airline',{FILTER => "PageFilter(1)"}
9.掃描到哪一行停止
scan 'airline',{FILTER =>"InclusiveStopFilter('row1')"}
10.只返回有指定Qualifier的數(shù)據(jù)
scan 'airline',{ FILTER =>"QualifierFilter(=,'binary:flightno')"} > = <來替換‘=’
11.返回滿足條件(某一列的值)的數(shù)據(jù)
scan 'airline', { COLUMNS =>'flightbetween:source', LIMIT => 4, FILTER => "ValueFilter( =, 'binaryprefix:hyd' )" } > = <來替換‘=’
行的最大版本是通過 HColumnDescriptor定義在每一個(gè)列族的似枕,默認(rèn)的最大版本號是1
不推薦設(shè)置 最大版本號 為很大的值(數(shù)百甚至更多),除非舊的數(shù)據(jù)對你而言十分重要年柠。因?yàn)樘嗟陌姹緯?huì)使 StoreFile 很大凿歼。
hbase org.apache.hadoop.hbase.mapreduce.Driver import apply_info /user/data_temp/apply_info hdfs路徑 hbase表
**
建表語句詳解:
-------
**
create 'testtable',{NAME => 'Toutiao', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '10', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'false', BLOCKCACHE => 'false'},
{NAME => 'coulmn', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '30', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'true'}
(其中的屬性有 REPLICATION_SCOPE 復(fù)制份數(shù) 冗恨,只包含一個(gè)列簇“Toutiao”答憔,versions:設(shè)置歷史版本數(shù) 默認(rèn)為1,TTL:過期時(shí)間 單位為秒掀抹,默認(rèn)為永久保存攀唯,COMPRESSION:壓縮方式,當(dāng)配置lzo的情況)
BLOOMFILTER
布隆過濾器渴丸,優(yōu)化HBase的隨即讀取性能侯嘀,可選值NONE|ROW|ROWCOL,默認(rèn)為NONE谱轨,該參數(shù)可以單獨(dú)對某個(gè)列簇啟用戒幔。啟用過濾器,對于get操作以及部分scan操作可以剔除掉不會(huì)用到的存儲(chǔ)文件土童,減少實(shí)際IO次數(shù)诗茎,提高隨機(jī)讀性能。Row類型適用于只根據(jù)Row進(jìn)行查找,而RowCol類型適用于根據(jù)Row+Col聯(lián)合查找敢订,如下:
Row類型適用于:get ‘NewsClickFeedback’,’row1′
RowCol類型適用于:get ‘NewsClickFeedback’,’row1′,{COLUMN => ‘Toutiao’}
對于有隨機(jī)讀的業(yè)務(wù)王污,建議開啟Row類型的過濾器,使用空間換時(shí)間楚午,提高隨機(jī)讀性能昭齐。
COMPRESSION
數(shù)據(jù)壓縮方式,HBase支持多種形式的數(shù)據(jù)壓縮矾柜,一方面減少數(shù)據(jù)存儲(chǔ)空間阱驾,一方面降低數(shù)據(jù)網(wǎng)絡(luò)傳輸量進(jìn)而提升讀取效率。目前HBase支持的壓縮算法主要包括三種:GZip | LZO | Snappy怪蔑,下面表格分別從壓縮率里覆,編解碼速率三個(gè)方面對其進(jìn)行對比:
Snappy的壓縮率最低,但是編解碼速率最高缆瓣,對CPU的消耗也最小喧枷,目前一般建議使用Snappy
IN_MEMORY
數(shù)據(jù)是否常駐內(nèi)存,默認(rèn)為false弓坞。HBase為頻繁訪問的數(shù)據(jù)提供了一個(gè)緩存區(qū)域割去,緩存區(qū)域一般存儲(chǔ)數(shù)據(jù)量小、訪問頻繁的數(shù)據(jù)昼丑,常見場景為元數(shù)據(jù)存儲(chǔ)呻逆。默認(rèn)情況,該緩存區(qū)域大小等于Jvm Heapsize * 0.2 * 0.25 菩帝,假如Jvm Heapsize = 70G咖城,存儲(chǔ)區(qū)域的大小約等于3.2G。需要注意的是HBase Meta元數(shù)據(jù)信息存儲(chǔ)在這塊區(qū)域呼奢,如果業(yè)務(wù)數(shù)據(jù)設(shè)置為true而且太大會(huì)導(dǎo)致Meta數(shù)據(jù)被置換出去宜雀,導(dǎo)致整個(gè)集群性能降低,所以在設(shè)置該參數(shù)時(shí)需要格外小心握础。
BLOCKCACHE
是否開啟block cache緩存辐董,默認(rèn)開啟。
TTL
數(shù)據(jù)過期時(shí)間禀综,單位為秒简烘,默認(rèn)為永久保存。對于很多業(yè)務(wù)來說定枷,有時(shí)候并不需要永久保存某些數(shù)據(jù)孤澎,永久保存會(huì)導(dǎo)致數(shù)據(jù)量越來越大,消耗存儲(chǔ)空間是其一欠窒,另一方面還會(huì)導(dǎo)致查詢效率降低覆旭。如果設(shè)置了過期時(shí)間,HBase在Compact時(shí)會(huì)通過一定機(jī)制檢查數(shù)據(jù)是否過期,過期數(shù)據(jù)會(huì)被刪除型将。用戶可以根據(jù)具體業(yè)務(wù)場景設(shè)置為一個(gè)月或者三個(gè)月寂祥。示例中TTL => ‘ 259200’設(shè)置數(shù)據(jù)過期時(shí)間為三天,以最后一次更新時(shí)間為開始時(shí)間(TTL=>的更新超時(shí)時(shí)間是指:該列最后更新的時(shí)間七兜,到超時(shí)時(shí)間的限制丸凭,而不是第一次創(chuàng)建,到超時(shí)時(shí)間惊搏。)