大數(shù)據(jù)專(zhuān)題--HBase

一发笔、簡(jiǎn)介

1.1組成:

Rowkey盟萨、列簇、列和列的value(單元格)

1了讨、Rowkey

每一行的唯一標(biāo)識(shí)捻激。
不能直接用業(yè)務(wù)主鍵制轰,會(huì)導(dǎo)致數(shù)據(jù)不平衡。
一般通用設(shè)計(jì)模式是加鹽鍵胞谭,給鍵加上二進(jìn)制字節(jié)作為前綴垃杖。

2、列簇

1)一張表通常有一個(gè)單獨(dú)的列簇丈屹,1張表中的列簇不會(huì)超過(guò)5個(gè)(HBase作為Janusgraph的后端存儲(chǔ)调俘,有9個(gè)列簇)。
2)列簇必須在創(chuàng)建表時(shí)候定義泉瞻,列只有在插入后才會(huì)存在脉漏,空值并不保存。
3)每一個(gè)列簇都會(huì)保存在自己的文件集合中袖牙,所有存儲(chǔ)設(shè)置都需要在列簇級(jí)別指定侧巨。
HBase默認(rèn)的塊大小是64KB,版本數(shù)默認(rèn)為3個(gè)版本鞭达,TTL可設(shè)置司忱,一旦到底過(guò)期時(shí)間可自動(dòng)刪除舊行。
4)多重列簇類(lèi)似于以Rowkey為連接條件的連接查詢(xún)畴蹭。

3坦仍、單元格:

列和行的交集,單元格是版本化的叨襟,最新版本號(hào)排咋最前面繁扎,所有單元格都會(huì)根據(jù)版本號(hào)降序排列。

1.2壓縮

壓縮是分區(qū)中HFile文件合并的過(guò)程糊闽,壓縮過(guò)程分為2種梳玫,小量和全量。
XH 小量壓縮閾值=3右犹,如果分區(qū)HFile文件超過(guò)了預(yù)設(shè)值提澎,就會(huì)啟動(dòng)小量壓縮,壓縮期間念链,不會(huì)發(fā)生持久化盼忌,如果Memsore寫(xiě)滿(mǎn),與該分區(qū)服務(wù)器交互的客戶(hù)端就會(huì)被堵塞掂墓,直至壓縮過(guò)程執(zhí)行完畢谦纱。(BS連接HBase超時(shí)原因)
XH 全量壓縮設(shè)置為7天一次。

二梆暮、相關(guān)操作

2.1hbase shell

進(jìn)入HBase命令行頁(yè)面
list:列出所有表

2.2namespace

HBase中沒(méi)有database的概念服协,這里的namespace命名空間指對(duì)一組表的邏輯分組,類(lèi)似RDBMS中的database啦粹;
HBase系統(tǒng)默認(rèn)定義了兩個(gè)缺省的namespace
hbase:系統(tǒng)內(nèi)建表偿荷,包括namespace和meta表
default:用戶(hù)建表時(shí)未指定namespace的表都創(chuàng)建在此

1)創(chuàng)建namespace
hbase>create_namespace 'test_ns'
2)列出所有namespace
hbase>list_namespace
3)查看namespace
hbase>describe_namespace 'test_ns'
4)在namespace下創(chuàng)建表
hbase>create 'test_ns:testtable', 'fm1'
5)查看namespace下的表
hbase>list_namespace_tables 'test_ns'
6)刪除namespace ----必須空的namespace才能刪除 要?jiǎng)h除掉里面的表
hbase>disable 'test_ns:testtable'
hbase>drop 'test_ns:testtable'
hbase>drop_namespace 'test_ns'

2.3table DML

1窘游、創(chuàng)建表
hbase>create 't_demo_tbl','f1','f2','f3' #-------t_demo_tbl是表名,f1跳纳,f2忍饰,f3是列簇名
2、查看表的結(jié)構(gòu):
hbase>describe 't_demo_tbl'
3寺庄、禁用艾蓝,啟用表
hbase>disable 't_demo_tbl'
hbase>enable 't_demo_tbl'
4、查看表結(jié)構(gòu)是否啟用【允許修改】 因?yàn)閱⒂玫谋聿辉试S修改:
hbase>is_enabled 't_demo_tbl'
5斗塘、增加一個(gè)列族:
hbase>disable 't_demo_tbl'
hbase>alter 't_demo_tbl', NAME=>'f1', VERSIONS=>3
hbase>enable 't_demo_tbl'
6赢织、刪除某個(gè)列族:
hbase>disable 't_demo_tbl'
hbase>alter 't_demo_tbl', NAME=>'f1', METHOD=>'delete' #--------注意大小寫(xiě)(簡(jiǎn)寫(xiě):alter 't_demo_tbl', 'delete'=>'f1')
hbase>enable 't_demo_tbl'

7、查看所有的表
hbase>list
8馍盟、查看某一表是否存在:
hbase>exists 't_demo_tbl'

9于置、清空表:
hbase>truncate 't_demo_tbl'
10、刪除某張表:
hbase>disable 't_demo_tbl'
hbase>drop 't_demo_tbl'

2.4table DDL

1贞岭、向表中插入數(shù)據(jù):
hbase>put 't_demo_tbl', 'r1', 'f1:c1', 'value' #--------列族的列可以不存在八毯,修改數(shù)據(jù)也是put,只需行健[rowkey]和列相同即可
2瞄桨、刪除某行數(shù)據(jù)的列[值]:
hbase>delete 't_demo_tbl', 'r1', 'c1', 'ts1' #--------刪除t_demo_tbl表话速,行健為r1的c1列中,時(shí)間戳為ts1的值芯侥,如果不指定ts1就刪除所有列值[默認(rèn)保持三個(gè)版本]
3泊交、刪除某行數(shù)據(jù):
hbase>deleteall 't_demo_tbl', 'r1'
注:刪除并不會(huì)物理刪除HBase中的記錄,它會(huì)被標(biāo)記被刪除的記錄柱查。真正的物理刪除在壓縮過(guò)程中執(zhí)行活合。

4、獲取某個(gè)行健的所有列族的列值:
hbase>get 't_demo_tbl', 'r1'
5物赶、獲取某個(gè)行健的所有某個(gè)列族的列值:
hbase>get 't_demo_tbl', 'r1','f1'
6、獲取某個(gè)行健的某兩個(gè)列族的列值:
hbase>get 't_demo_tbl', 'r1','f1','f2'
7留晚、獲取某個(gè)行健的某個(gè)列族的某個(gè)列值:
hbase>get 't_demo_tbl', 'r1', 'f1:c1'
8酵紫、獲取某個(gè)表的所有行健值:
hbase>scan 't_demo_tbl'
9、獲取某個(gè)表的前3行:
hbase>scan 't_demo_tbl', {LIMIT=>3}
10错维、獲取某個(gè)表的從指定位置開(kāi)始的行:
hbase>scan 't_demo_tbl', {STARTROW=>'rowKey', LIMIT=>3}
11奖地、獲取某個(gè)表的指定列的所有行數(shù)據(jù):
hbase>scan 'heroes', {COLUMNS =>'f1:c1'}
12、統(tǒng)計(jì)表的行數(shù):
hbase>count 't_demo_tbl'
INTERVAL=>100000000 統(tǒng)計(jì)間隔

或者h(yuǎn)base org.apache.hadoop.hbase.mapreduce.RowCounter 't_demo_tbl'
比hbase shell 統(tǒng)計(jì)快一些

13赋焕、清空表:truncate ‘tablename’
14参歹、移除整張表:drop ‘tablename’
以上兩步驟,必須先禁用表(disable)隆判。

2.5HBase API

Get類(lèi)
Put類(lèi)
Delete類(lèi)
Scan類(lèi)
過(guò)濾器

三犬庇、hbase 2.0及以上版本的優(yōu)化:

1.flush和compaction支持到列簇級(jí)別

四僧界、HBase 不同namespace下表的轉(zhuǎn)移

1、disable 'TableName'

2臭挽、snapshot 'TableName', TableNameSnapshot1'

3捂襟、clone_snapshot 'TableNameSnapshot1', 'NewNameSpace:TableName'

4、delete_snapshot 'TableNameSnapshot1'

-------------------------------------分割線(xiàn)----------------------
一:hbase的存儲(chǔ)形式
hbase的內(nèi)部使用KeyValue的形式存在欢峰,其key是有rowkey:family:column:logTime葬荷,value是其存儲(chǔ)的內(nèi)容。


image.png

其在region的是大多以升序的形式排列纽帖,唯一的是logtime是以降序的形式進(jìn)行排列宠漩。

所以,按照越靠近左邊的信息越容易被檢索到懊直。其設(shè)計(jì)時(shí)扒吁,要考慮把重要的信息放左邊,不重要的信息放到右邊吹截。這樣可以提高查詢(xún)數(shù)據(jù)的速度瘦陈。這樣,最重要的提高索引速度的就是設(shè)計(jì)合適的rowkey波俄。

二:rowkey的設(shè)計(jì)原則
1:長(zhǎng)度原則晨逝,最短越好,最大不能超過(guò)64K懦铺。太長(zhǎng)的影響有兩點(diǎn)捉貌,一是極大影響了HFile的存儲(chǔ)效率。二是緩存memstore不能得到有效利用冬念,緩存不能存放太多的信息趁窃,造成檢索效率的降低。

2:唯一原則

保證rowkey的唯一性急前,這條沒(méi)有什么要講的醒陆。

3:自己一條原則

盡量保證經(jīng)常一起用的rowkey存儲(chǔ)在同一個(gè)region上,有助于提升檢索效率裆针。但要避免熱點(diǎn)問(wèn)題刨摩。

4:對(duì)于常用的檢索的rowkey,盡量使用高表(行多列少)世吨,二部選擇寬表(列多行少)澡刹。

三:rowkey引起熱點(diǎn)問(wèn)題的集中解決方法
1-加鹽:在rowkey前面加一個(gè)冗余信息,這樣可以把數(shù)據(jù)分散到不同的region中耘婚。

優(yōu)點(diǎn):可以有效的防止rowkey集中分配到一個(gè)或多個(gè)region中罢浇。有效避免了熱點(diǎn)問(wèn)題;

缺點(diǎn):無(wú)形中增加了rowkey的長(zhǎng)度;范圍檢索得不到有效使用嚷闭。

2-字段交換攒岛,提升權(quán)重:如果rowkey中含有幾個(gè)信息字段,可以調(diào)整信息字段的順序凌受。

缺點(diǎn):對(duì)于單個(gè)信息字段阵子,或者無(wú)論怎么調(diào)整都會(huì)遇到region熱點(diǎn)的rowkey是解決不了的。

3-隨機(jī)鍵:把rowkey進(jìn)行hash化胜蛉,在分配到不同的服務(wù)器上挠进。和加鹽的方式相似;

以下是順序讀的性能排行(由高到低誊册,寫(xiě)性能與讀性能相反):順序鍵 -> 使用加鹽鍵 -> 提升字段鍵 -> 隨機(jī)鍵

強(qiáng)加幾個(gè)知識(shí)點(diǎn):

1-盡量使用范圍查詢(xún)代替前綴查詢(xún)领突;

2-數(shù)據(jù)多時(shí),用分頁(yè)查詢(xún)案怯;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末君旦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嘲碱,更是在濱河造成了極大的恐慌金砍,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麦锯,死亡現(xiàn)場(chǎng)離奇詭異恕稠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)扶欣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)鹅巍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人料祠,你說(shuō)我怎么就攤上這事骆捧。” “怎么了髓绽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵敛苇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我顺呕,道長(zhǎng)接谨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任塘匣,我火速辦了婚禮,結(jié)果婚禮上巷帝,老公的妹妹穿的比我還像新娘忌卤。我一直安慰自己,他們只是感情好楞泼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布驰徊。 她就那樣靜靜地躺著笤闯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棍厂。 梳的紋絲不亂的頭發(fā)上颗味,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音牺弹,去河邊找鬼浦马。 笑死,一個(gè)胖子當(dāng)著我的面吹牛张漂,可吹牛的內(nèi)容都是我干的晶默。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼航攒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼磺陡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起漠畜,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤币他,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后憔狞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蝴悉,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年躯喇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辫封。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡廉丽,死狀恐怖倦微,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情正压,我是刑警寧澤欣福,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站焦履,受9級(jí)特大地震影響拓劝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘉裤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一郑临、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屑宠,春花似錦厢洞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丧叽。三九已至,卻和暖如春公你,著一層夾襖步出監(jiān)牢的瞬間踊淳,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工陕靠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迂尝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓懦傍,卻偏偏與公主長(zhǎng)得像雹舀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子粗俱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354