日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5 HBase命令行接口

發布時間:2025/1/21 编程问答 83 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5 HBase命令行接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HBase命令行接口的使用方法

HBase shell

  • 進入退出
  • hbase shell #在任意節點都可以進入hbase shell exit
  • 查看幫助信息
  • help

    通用命令

  • 查詢服務器狀態,例如服務器的數量

    status
  • 查詢hbase版本

    version
  • 如果有kerberos認證,需要事先使用相應的keytab進行一下認證(使用kinit命令),認證成功之后再使用hbase shell進入可以使用whoami命令可查看當前用戶

    whoami
  • DDL(Data Definition Language 數據定義語言)

    創建一個表(create)

    語法:create

    , {NAME=>,VERSIONS=>}

    例如:創建表t1,有兩個family name:f1,f2,且版本均為2

    create 't1',{NAME=>'f1',VERSIONS=>2},{NAME=>'f2',VERSIONS=>2}

    注意點:

    • 區分大小寫,NAME不能寫成name
    • 表名,列名需要以字符串的形式輸入,即用單引號修飾,如’t1’

    還有一種非標準創建的語法,創建表member,列族是member_id,address,info,版本為1(默認版本)。如下:

    create 'member','member_id','address','info'

    獲得表的描述/結構(describe)

    語法:describe

    list #列出所有的表 describe 'member' #查看表的描述 desc 'member'簡寫

    刪除一個列族,alter,disable,enable

    alter 'member',{NAME=>'member_id',METHOD=>'delete'}#只能刪除disabled的表的列族,沒有添加列族 #將表enable,啟用表 enable 'member' #將表disabled,禁用表 disable 'member'

    刪表, drop

    create 'temp_table','member_id','address','info'#創建一個示例 is_enabled 'temp_table' #查看是否可用 is_disabled 'temp_table' #查看是否禁用 drop 'temp_table' #只有被禁用的表才能被刪除

    刪除并重新創建一個表

    truncate 't1'

    查詢表是否存在

    exists 'member'

    查看文件存儲路徑

    打開hdfs的web頁面 /hbase/data/default/member

    default是默認的命名空間,member是表名

    DML(數據操縱語言)

    插入/更新數據,put

    語法:put <table(表名)> ,<RK(RowKey)>,<CF : CQ(列鍵)>,<value(值)>

    put 'member' ,'guojing','info:company','alibaba' put 'member' ,'guojing','info:age','24' put 'member' ,'guojing','address:contry','china' put 'member' ,'guojing','address:province','zhejiang' put 'member' ,'guojing','address:city','hangzhou'

    注:現在表的數據都在內存中,并沒有落地到磁盤。如果這時候想要落地到磁盤只能手動落地

    先插入MemStore,到達閾值和時間后才會插入內存,可以不運行flush,查看hdfs文件中相應表的info文件,為空,說明未插入內存。
    命令: flush< table >

    flush 'member'

    更新一條數據

    #將guojing的年齡更新為18,原數據還在原位置 put 'member','guojing','info:age','18'

    實現加入數據的遞增

    #給'xiaofeng'這個RowKey增加'info:age'字段,并使用counter實現遞增 incr 'member','xiaofeng','info:age' get 'member','xiaofeng','info:age' incr 'member','xiaofeng','info:age' get 'member','xiaofeng','info:age' #獲取當前counter的值 get_counter 'member','xiaofeng','info:age'

    查詢數據,get

    獲取一個RowKey的所有數據(一行數據)
    get < table> , < RK>

    get 'member','guojing'


    獲取一個RowKey中,一個列族的所有數據

    get 'member','guojing','info'

    獲取一個RowKey中,一個列鍵(列族:列)的所有數據

    get 'member','guojing','info:age'

    獲取不同版本的數據

    #通過timestamp獲取不同版本的數據 get 'member','guojing',{COLUMN=>'info:age',TIMESTAMP=>1627474097682}

    查詢表中有多少行

    count 'member'

    全表掃描(scan)

    scan < table >

    #注:全表掃描時一般和過濾器一起使用,不指定版本默認顯示一個版本 #(1)掃描時指定列族 scan 'member',{COLUMN=>'info'} #(2)掃描時指定列族,并限定顯示最新的5個版本 要在創建表的時候設置版本,如果只有一個版本就沒有歷史數據了 scan 'member',{COLUMN=>'info',VERSIONS=>5} #(3)設置開啟Row模式,開啟Row模式會把那些已經刪除標記但未刪除的數據也顯示出來 scan 'member',{COLUMN=>'info',RAW => true} #(4)列的過濾 # 查詢member表中列族為info和address的信息 scan 'member',{COLUMNS=>{'info','address'}} # 查詢member表中列鍵為info:name和address:city scan 'member',{COLUMNS=>{'info:name','address:city'}} # 查詢member表中列族為info和address且列名含有a字符的信息 scan 'member',{COLUMNS=>{'info','data'},FILTER=>"(QualifierFilter(=,'substring:a'))"} # 查詢member表中列族為info,rk范圍是[rk0001,rk0003)的數據 scan 'member',{COLUMNS=>'info',STARTROW=>'00001',ENDROW=>'00003'} # 查詢member表中RowKey中以rk字符開頭 scan 'member',{FILTER=>"PrefixFilter('0')"} # 查詢member表中指定時間范圍的數據 scan 'member',{TIMERANGE=>{12341234,43214321}}

    刪除數據,delete

    刪除一次是刪除標記,get能獲得上一個版本的數據,如果只有一個版本,就不能獲得,但是其實是添加刪除標記并沒有真正刪除,用scan可以看見其為type為delete

    #刪除id為guojing的值的'info:age'字段 delete 'member','guojing','info:age' #刪除整行 delete 'member','guojing'

    清空整張表

    truncate 'member'

    Region操作

    1)移動region

    語法:move ‘encodeRegionName’,‘ServerName’

    encodeRegionName指的是regionName后面的編碼,ServerName指的是master-status的Region Servers列表

    # 將表'member'移動到節點node2上 move '2d47b41ebf2c0be89e5b7d5f7e97bf3a','node2,16020,1628232102271'

    尋找encodeRegionName的過程,進入hbase的web頁面(端口號默認為16010),找到相應的ServerName

    點擊進入后即可看到相應的region信息,編碼值表名后面的一長串

    點擊相應的表進入復制相應的encodeRegionName

    進入hbase的web頁面(端口號默認為16010),找到相應的ServerName

    2)開啟關閉region

    語法:balance_switch true|false

    HBase是一種支持自動負載均衡的分布式KV數據庫,在開啟balance的開關(balance_switch)后,HBase的HMaster進程會自動根據指定策略挑選出一些Region,并將這些Region分配給負載比較低的RegionServer上。

    (當有新的節點進入hbase,為了負載均衡一種方式是手動將一部分region移動到新的節點,另一種方案是開啟自動均衡策略,當region數據增多后,分裂時進入新的節點)

    balance_switch true

    3)手動split

    語法:split ‘regionName’,‘splitKey’

    split '2d47b41ebf2c0be89e5b7d5f7e97bf3a','001'

    4)手動觸發major compaction

    HBase是基于一種LSM-Tree(Log-Structured Merge Tree)存儲模型設計的,寫入路徑上是先寫入WAL(Write-Ahead-Log)即預寫日志,再寫入memstore緩存,滿足一定條件后執行flush操作將緩存數據刷寫到磁盤,生成一個HFile數據文件。隨著數據不斷寫入,磁盤HFile文件就會越來越多,文件太多會影響HBase查詢性能,主要體現在查詢數據的io次數增加。為了優化查詢性能,HBase會合并小的HFile以減少文件數量,這種合并HFile的操作稱為Compaction。

    Minor Compaction:指選取一些小的、相鄰的HFile將他們合并成一個更大的HFile。默認情況下,minor compaction會刪除選取HFile中的TTL過期數據。

    Major Compaction:指將一個Store中所有的HFile合并成一個HFile,這個過程會清理三類沒有意義的數據:被刪除的數據(打了Delete標記的數據)、TTL過期數據、版本號超過設定版本號的數據。

    #Compact all regions in a table:壓縮表中所有region major_compact 't1' #Compact an entire region:壓縮一個region major_compact 'r1' #Compact a single column family within a region:壓縮region中的一個列族 major_compact 'r1', 'c1' #Compact a single column family within a table:壓縮表中的一個列族 major_compact 't1', 'c1' ```cmd #Compact all regions in a table:壓縮表中所有region major_compact 't1' #Compact an entire region:壓縮一個region major_compact 'r1' #Compact a single column family within a region:壓縮region中的一個列族 major_compact 'r1', 'c1' #Compact a single column family within a table:壓縮表中的一個列族 major_compact 't1', 'c1' 與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的5 HBase命令行接口的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。