hbase shell操作(如建表收奔,清空表掌呜,增刪改查)

hbase操做

hbase web操作

訪問地址 http://hmaster:60010
hmaster的ip配置在$HBASE_HOME/conf/hbase-site.xml中
ip映射成主機名
    在env/hosts中配置
    在windows系統(tǒng)中的C:\Windows\System32\drivers\etc目錄下的hosts文件中配置)


hbase shell 基本操作:

hbase shell 進入hbase console命令
whoami 查用戶
help查看基本命令集合
help command 查看命令幫助
list看庫中所有表
status 查看當(dāng)前運行服務(wù)器狀態(tài)
version 版本查詢
exits '表名字' 判斷表存在

hbase shell中刪除為 ctrl + backspace(單按刪除鍵不好使)

1)建表

    語法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}

具體命令
    hbase(main):004:0> exists 'test'
    hbase(main):005:0> create 'test','cf'

    hbase> create 't1', {NAME => 'f1', VERSIONS => 5}
    hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
    省略模式建立列族
    hbase> create 't1', 'f1', 'f2', 'f3'
    指定每個列族參數(shù)
    hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
    hbase> create 't1', 'f1', {SPLITS => ['10', '20', '30', '40']}
    hbase> create 't1', 'f1', {SPLITS_FILE => 'splits.txt'}
    hbase> # Optionally pre-split the table into NUMREGIONS, using
    hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)
    hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
    設(shè)置不同參數(shù),提升表的讀取性能坪哄。
    create 'lmj_test',
        {NAME => 'adn', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, 
        {NAME => 'fixeddim', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, 
        {NAME => 'social', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}
    每個參數(shù)屬性都有性能意義质蕉,通過合理化的設(shè)置可以提升表的性能
     create 'lmj_test',
        {NAME => 'adn', BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'},
        {NAME => 'fixeddim',BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'},
        {NAME => 'social',BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0',COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'}

2)建表后查看表:describe

    得出
    {NAME => 'lmj_test', 
    FAMILIES => 
    [
    {NAME => 'adn', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, 
                {NAME => 'fixeddim', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, 
                {NAME => 'social', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}
            ]
        }

3)清空表:truncate ‘lmj_test’

4)刪除表:

        分兩步,首先disable 'lmj_test'翩肌,然后drop 'lmj_test'

5)修改表結(jié)構(gòu):先disable后enable

        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)對表中記錄的操作(4種行操作)

    put 增加一行
        語法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
        其中模暗,timestamp可以系統(tǒng)默認,也可以自己設(shè)定念祭,如

         put 't1', 'r1', 'c1', 'value', ts1
         put 'lmj_test','00001','adn:adn_3','aaa',1432483200000
         put 'lmj_test','00001','fixeddim:appcategory_1','1',1432483200000
         put 'lmj_test','00001','fixeddim:interest_15','100',1432483200000

    get查詢對應(yīng)數(shù)據(jù)(可以指定行兑宇、列族、列粱坤、版本)
        get 'lmj_test','000000104257464',{TIMESTAMP=>1432483200000}

    delete 刪除數(shù)據(jù)
        刪除指定行中指定列:
            delete <table>, <rowkey>,  <family:column> , <timestamp>(必須指定列名隶糕,刪除其所有版本數(shù)據(jù))
            delete 'lmj_test','000000104257464','f1:col1'
        刪除整行數(shù)據(jù)(可不指定列名):
            deleteall <table>, <rowkey>,  <family:column> , <timestamp>
            deleteall 'lmj_test','000000104257464'

    scan 掃描全表,指定過濾條件比规,返回對應(yīng)行
        scan 'lxw_hbase', {LIMIT => 1}
            其他條件繼續(xù)添加在大括號中
    以上4個操作類是 org.apache.hadoop.hbase.client的子類若厚,參考官網(wǎng)API查看詳細信息

    count統(tǒng)計表中記錄數(shù)
         count 'lxw_hbase', {INTERVAL => 100, CACHE => 500}
         #每100條顯示一次,緩存區(qū)為500

7)表操作權(quán)限

    給用戶分配對每個表的操作權(quán)限蜒什,有RWXCA五種测秸,對應(yīng)READ, WRITE, EXEC, CREATE, ADMIN
    grant 'liu_mja','RW','lxw_hbase'    #分配給用戶liu_mja表lxw_hbase的讀寫權(quán)限
    還可以 查看權(quán)限
        user_permission 'lxw_hbase'
    收回權(quán)限
        revoke 'liu_mja','lxw_hbase'

8)命名空間

    關(guān)系數(shù)據(jù)庫系統(tǒng)中,命名空間namespace是表的邏輯分組,同一組中的表有類似的用途灾常。
    以下引自:
    (http://blog.csdn.net/u010967382/article/details/37878701?utm_source=tuicool&utm_medium=referral)

    hbase的表也有命名空間的管理方式霎冯,命名空間的概念為即將到來的多租戶特性打下基礎(chǔ):
        配額管理( Quota Management (HBASE-8410)):限制一個namespace可以使用的資源,資源包括region和table等钞瀑; 
        命名空間安全管理( Namespace Security Administration (HBASE-9206)):提供了另一個層面的多租戶安全管理沈撞; 
        Region服務(wù)器組(Region server groups (HBASE-6721)):一個命名空間或一張表,可以被固定到一組 regionservers上雕什,從而保證了數(shù)據(jù)隔離性缠俺。 

    命名空間可以被創(chuàng)建、移除贷岸、修改壹士。
    建表時可以指定命名空間,格式如下:<namespace>:<table>
    #Create a namespace
    create_namespace 'my_ns'

    #create my_table in my_ns namespace
    create 'my_ns:my_table', 'fam'

    #drop namespace
    drop_namespace 'my_ns'

    #alter namespace
    alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}

    預(yù)定義的命名空間:
        有兩個系統(tǒng)內(nèi)置的預(yù)定義命名空間
        hbase   系統(tǒng)命名空間偿警,用于包含hbase的內(nèi)部表 
        default 所有未指定命名空間的表都自動進入該命名空間
    使用默認的命名空間
        #namespace=default and table qualifier=bar
        create 'bar', 'fam'
    指定命名空間
        #namespace=foo and table qualifier=bar
        create 'foo:bar', 'fam'


hbase原理及時間戳管理介紹

分布式的躏救、面向列的開源數(shù)據(jù)庫
hdfs文件存儲
MR處理數(shù)據(jù)
zookeeper做協(xié)同服務(wù)

hbase 表

數(shù)據(jù)以表存儲
 表含行、列,列分為列簇(family)

如圖盒使,


hbase數(shù)據(jù)存儲格式

key1,key2,key3是三條記錄的唯一row key值崩掘,
column-family1,column-family2,column-family3是三個列族
每個列族下包括幾列,如列族 column-family1包括兩列column1和column2

  row這個維度用于region切分
   column則不用于分片少办,和row不同的是苞慢,一個row中多個columns的put或者delete操作是一個原子事務(wù)(同一個原子事務(wù)中不能同時put和 delete)
   Row key和column key(HBase中也稱為qualifier)是bytes類型,而時間維度的key則是long integer類型凡泣,典型使用 java.util.Date.getTime()或者System.currentTimeMillis()來做為時間維度的key枉疼。
 唯一的確定一個cell數(shù)據(jù):由row key1皮假、column-family1鞋拟、column1找到值集,值集按時間戳t排列惹资,按有效期取得每個對應(yīng)時間的值t1:abc,t2:gdxdf
   每個cell的值可能包含多個版本贺纲,以timestamp索引,倒序排列褪测,默認為最近一個版本猴誊,時間戳最大

 (1) Row Key:nosql數(shù)據(jù)庫中記錄的主鍵,在 hbase內(nèi)部保存為字節(jié)數(shù)組(字典序排列存儲)侮措,  任意字符串(最大長度是 64KB)懈叹。讀有位置相關(guān)性,經(jīng)常一起讀的行要放到一起存儲分扎。
       注意:int類型數(shù)據(jù)的字典序是1,10,100,118,11,12,128,15,16澄成。恢復(fù)成int數(shù)值的自然序畏吓,在行鍵的左側(cè)全部填充0(左填充0)墨状。

 (2)  列族 column family:是schema的一部分(而列不是),必須在用表前先定義菲饼。列名以列族為前綴肾砂,
  create 'test','cf'
    put 'test','001','cf:c1','a1',1432483200000
    put 'test','002','cf:c2','a2'
    put 'test','001','cf2:c1','a1',1432483200000    報錯ERROR: Unknown column family! Valid column names: cf:*

 (3) cell: 無類型,全部存儲為字節(jié)碼
 (4)  時間戳 timestamp管理(多版本數(shù)據(jù)有效期設(shè)置)
     每個cell的值可能包含多個版本宏悦,以timestamp索引镐确,倒序排列(最近數(shù)據(jù)在最前面,默認取最近的數(shù)據(jù))饼煞。時間戳的類型是 64 位整型源葫。時間戳可以自動生成,也可以自己設(shè)定派哲。避免數(shù)據(jù)版本沖突則時間戳必須具有唯一性臼氨。
      版本具有有效期,超過有效期則刪除芭届。有兩種方式回收版本储矩,稱為 GC(垃圾收集)
            列值版本的保存數(shù)量限制感耙,通過兩種方式設(shè)置
1, version設(shè)置保留版本數(shù)持隧。超過則刪除最老的即硼,
  創(chuàng)建Column Family時通過HColumnDescriptor.setMaxVersions(int versions)設(shè)置,這是Column Family級別屡拨,設(shè)置是即時生效只酥,讀取時讀不了,但物理刪除還是需要等到major compact操作中執(zhí)行呀狼。設(shè)置為1只保留一個
2裂允,TTL(Time To Live)設(shè)置保留時間。超過TTL則刪除哥艇,默認是forever绝编。
通過 HColumnDescriptor.setTimeToLive(int seconds)可以設(shè)置TTL。讀操作如Get/Scan等是即時生效貌踏,但物理清除要等到major compact十饥。一行row中所有cell的TTL都失效,則刪除整行祖乳,HBase不顯示建立或刪除行逗堵,行中cell有值且有效,行就存在眷昆。

注意蜒秤,version版本控制中,major compact不進行隙赁,則刪除最近版本后垦藏,失效版本可以重新恢復(fù)為有效值

put的時間戳
默認使用的是currentTimeMillis。應(yīng)用也可以使用自定義的值來做為每個列的 timestamp伞访,只需要是一個long integer的值即可掂骏,不一定是時間
而get默認返回timestamp最大值的數(shù)據(jù)
delete的時間戳
1. 刪除某個timestamp之前所有老版本
(指定timestamp比row中最新的版本大,則相當(dāng)于刪除整行厚掷,不是立即刪除元數(shù)據(jù)弟灼,而是等到major compact時)
2. 刪除某個timstamp點的版本

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冒黑,隨后出現(xiàn)的幾起案子田绑,更是在濱河造成了極大的恐慌,老刑警劉巖抡爹,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掩驱,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機欧穴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門民逼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涮帘,你說我怎么就攤上這事拼苍。” “怎么了调缨?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵疮鲫,是天一觀的道長。 經(jīng)常有香客問我弦叶,道長俊犯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任湾蔓,我火速辦了婚禮瘫析,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘默责。我一直安慰自己,他們只是感情好咸包,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布桃序。 她就那樣靜靜地躺著,像睡著了一般烂瘫。 火紅的嫁衣襯著肌膚如雪媒熊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天坟比,我揣著相機與錄音芦鳍,去河邊找鬼。 笑死葛账,一個胖子當(dāng)著我的面吹牛柠衅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播籍琳,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼菲宴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趋急?” 一聲冷哼從身側(cè)響起喝峦,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體译秦,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡满着,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年叭披,在試婚紗的時候發(fā)現(xiàn)自己被綠了糊秆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耘擂。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓖租,死狀恐怖勋锤,靈堂內(nèi)的尸體忽然破棺而出饭玲,到底是詐尸還是另有隱情,我是刑警寧澤叁执,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布茄厘,位于F島的核電站,受9級特大地震影響谈宛,放射性物質(zhì)發(fā)生泄漏次哈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一吆录、第九天 我趴在偏房一處隱蔽的房頂上張望窑滞。 院中可真熱鬧,春花似錦恢筝、人聲如沸哀卫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽此改。三九已至,卻和暖如春侄柔,著一層夾襖步出監(jiān)牢的瞬間共啃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工暂题, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留移剪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓薪者,卻偏偏與公主長得像纵苛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子啸胧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容