shell命令列中操作HBase資料庫
2、Shell控制
進入到shell命令列介面,執行hbase命令,並附加shell關鍵字:
[grid@hdnode3 ~]$ hbase shell
HBase Shell; enter ¨help¨ for list of supported commands.
Type "exit" to leave the HBase Shell
Version 0.90.5, r1212209, Fri Dec 9 05:40:36 UTC 2011
hbase(main):001:0>
雖然成功登入進去了,可是我們也不知道現在能做什麼,也不瞭解SHELL下都有哪些命令。這個時候,我們可以選擇,去看官方文件中的說明,或者,敲個help上去看看。
hbase(main):002:0> help
..................
..................
COMMAND GROUPS:
Group name: general
Commands: status, version
Group name: ddl
Commands: alter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list
Group name: dml
Commands: count, delete, deleteall, get, get_counter, incr, put, scan, truncate
Group name: tools
Commands: assign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump
Group name: replication
Commands: add_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication
..................
..................幫助資訊果然有幫助,通過輸出的資訊,我們大致瞭解能夠做什麼。可以看到hbase中也是分有ddl/dml這類語句,此外還有與複製相關的,與管理相關的命令等等。
先來試試通用(general)命令,查詢狀態:
hbase(main):003:0> status
5 servers, 0 dead, 0.4000 average load查詢版本:
hbase(main):004:0> version
0.90.5, r1212209, Fri Dec 9 05:40:36 UTC 2011接下來重點項,DDL和DML(想不到HBase也分了DML/DDL語句)。HBase中沒有庫的概念,做為BigTable的山寨產品,儘管沒名山寨到名字,但山寨到了精髓,從設計上來說,它也不需要分庫,甚至不需要分表,所有資料放到同一張表中也是可以的,這就是真正的BigTable嘛。
建立表物件:
hbase(main):005:0> create ¨t¨,¨t_id¨,¨t_vl¨
0 row(s) in 2.3490 secondsHBase中建立物件的語法比較靈活,前面這個示例是簡寫法,其功能等效於完整寫法,"hbase> create ¨t¨, {NAME => ¨t_id¨}, {NAME => ¨t_vl¨}",第一個引數用於指定表名,後面跟的所有引數都是列族的名稱。每個表的列族需要在表建立時定義好(儘管後期也可以修改,但最好一開始就定義好),從這個角度來看,HBase中的物件是結構化的。
檢視錶物件:
hbase(main):006:0> list
TABLE
t
1 row(s) in 0.0080 seconds
hbase(main):018:0> describe ¨t¨
DESCRIPTION ENABLED
{NAME => ¨t¨, FAMILIES => [{NAME => ¨t_id¨, BLOOMFILTER => ¨NONE¨, REPLICATION_SCOPE => ¨0¨, COMPRESSION => true
¨NONE¨, VERSIONS => ¨3¨, TTL => ¨2147483647¨, BLOCKSIZE => ¨65536¨, IN_MEMORY => ¨false¨, BLOCKCACHE => ¨t
rue¨}, {NAME => ¨t_vl¨, BLOOMFILTER => ¨NONE¨, REPLICATION_SCOPE => ¨0¨, COMPRESSION => ¨NONE¨, VERSIONS =>
¨3¨, TTL => ¨2147483647¨, BLOCKSIZE => ¨65536¨, IN_MEMORY => ¨false¨, BLOCKCACHE => ¨true¨}]}
1 row(s) in 0.0100 seconds輸出的格式也是JSON串的形式,從中可以看到保留的版本數,TTL號(Time to Live,保留時間),列的定義,塊大小等等。
修改表物件,修改(含刪除)前必須首先禁用物件,執行修改命令成功後,再啟用物件。
禁用物件:
hbase(main):004:0> disable ¨t¨
0 row(s) in 2.0430 seconds判斷當前表物件啟用或禁用:
hbase(main):007:0> is_enabled ¨t¨
false
0 row(s) in 0.0040 seconds
hbase(main):008:0> is_disabled ¨t¨
true
0 row(s) in 0.0040 seconds修改表物件,增加一個列族:
hbase(main):021:0> alter ¨t¨, {NAME => ¨t_info¨, VERSIONS => 3}
0 row(s) in 0.0360 seconds
hbase(main):023:0> enable ¨t¨
0 row(s) in 2.0250 seconds插入記錄:
hbase(main):025:0> put ¨t¨,¨10001¨,¨t_vl:name¨,¨jss¨
0 row(s) in 0.0060 seconds
hbase(main):026:0> put ¨t¨,¨10001¨,¨t_vl:age¨,¨99¨
0 row(s) in 0.0070 seconds
hbase(main):027:0> put ¨t¨,¨10001¨,¨t_info:general¨,¨his fullname is junsanis!¨
0 row(s) in 0.0040 seconds記錄獲取:
hbase(main):028:0> get ¨t¨,¨10001¨
COLUMN CELL
t_info:general timestamp=1365670813664, value=his fullname is junsanis!
t_vl:age timestamp=1365670733223, value=99
t_vl:name timestamp=1365670723056, value=jss
3 row(s) in 0.0450 seconds獲取指定記錄中指定列族的資料:
hbase(main):029:0> get ¨t¨,¨10001¨,¨t_vl¨
COLUMN CELL
t_vl:age timestamp=1365670733223, value=99
t_vl:name timestamp=1365670723056, value=jss
2 row(s) in 0.0070 seconds獲取指定記錄中指定列族中指定列的資料:
hbase(main):030:0> get ¨t¨,¨10001¨,¨t_vl:age¨
COLUMN CELL
t_vl:age timestamp=1365670733223, value=99
1 row(s) in 0.0070 seconds記錄更新(跟插入沒有區別):
hbase(main):031:0> put ¨t¨,¨10001¨,¨t_vl:age¨,¨10¨
0 row(s) in 0.0050 seconds
hbase(main):032:0> get ¨t¨,¨10001¨,¨t_vl:age¨
COLUMN CELL
t_vl:age timestamp=1365670912700, value=10
1 row(s) in 0.0080 seconds全表掃描:
hbase(main):033:0> scan ¨t¨
ROW COLUMN+CELL
10001 column=t_info:general, timestamp=1365670813664, value=his fullname is junsanis!
10001 column=t_vl:age, timestamp=1365670912700, value=10
10001 column=t_vl:name, timestamp=1365670723056, value=jss
1 row(s) in 0.0370 seconds全表描述某個列:
hbase(main):036:0> scan ¨t¨, {COLUMNS => ¨t_vl¨}
ROW COLUMN+CELL
10001 column=t_vl:age, timestamp=1365670912700, value=10
10001 column=t_vl:name, timestamp=1365670723056, value=jss
1 row(s) in 0.0080 seconds刪除記錄行:
hbase(main):043:0> delete ¨t¨,¨10001¨,¨t_vl:age¨
0 row(s) in 0.0050 seconds
hbase(main):045:0> get ¨t¨,¨10001¨
COLUMN CELL
t_info:general timestamp=1365670813664, value=his fullname is junsanis!
t_vl:name timestamp=1365670723056, value=jss
2 row(s) in 0.0070 seconds刪除表:
hbase(main):047:0> disable ¨t¨
0 row(s) in 2.0230 seconds
hbase(main):048:0> drop ¨t¨
0 row(s) in 1.1170 seconds看完前面的例子,大家有沒有問題,或者想到了什麼?我腦子裡反正是蹦出問號了:HBase中沒有UPDATE操作,只有INSERT,可是我們每次put新記錄都替換掉了舊的版本,怎麼儲存大量記錄呢?難道每個row key的columns中只能存在一條記錄?這不科學!這也顯然不是人民群眾期待並且喜聞樂見的表現嘛。
這個問題呀,其實是列值儲存版本(VERSIONS)或保留時間(TTL, Time to Liv)在起作用。
比如,我們希望統計某使用者的最近(n條)瀏覽記錄,那麼,建立HBase表物件如下:
- hbase> create ¨rlog¨,¨userid¨,{NAME=>¨article¨,VERSIONS=>100}
當前設定,保留最近的100個版本。當使用者瀏覽帖子時,就向rlog表中插入一條記錄,形式如下:
- hbase> put ¨rlog¨,$userid,¨article:id¨,$aid
這裡僅選擇記錄瀏覽的使用者ID和瀏覽頁面ID,也可以根據實際情況,儲存頁面的URL地址,文章標題等等資訊。HBase表列族是非結構化的,大家可以根據需求任意增加列值。
那麼,要獲取使用者最近瀏覽記錄,應該怎麼查呢?,比如說獲取最近瀏覽的10條記錄:
- hbase> get ¨rlog¨,$userid,{COLUMN=>¨article:id¨, VERSIONS=>10}
除了通過VERSIONS控制外,還可以考慮通過版本的儲存時間TTL來控制,TTL的單位是秒,預設一般是儲存30天。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-759609/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HBASE的SHELL命令操作
- hbase shell 基本操作命令
- 資料庫操作命令列神器:mycli資料庫命令列
- hbase shell命令
- HBase 常用Shell命令
- HBase 系列(五)——HBase常用 Shell 命令
- shell 操作mysql資料庫MySql資料庫
- Hbase shell的基本操作
- hbase之 Hbase shell 常用命令
- HBase shell 命令介紹
- HBase shell詳細操作指南
- Hbase快速開始——shell操作
- Mysql資料庫操作命令MySql資料庫
- 對資料庫中列的一些基本的操作的SQL命令(轉)資料庫SQL
- HBase基本的資料操作
- Hbase shell 常用命令1
- hbase - [03] 客戶端常用命令(hbase shell)客戶端
- hbase與phoenix整合(使用phoenix操作hbase資料)
- Shell命令列命令列
- hbase基本概念和hbase shell常用命令用法
- Hbase shell 常用命令筆記筆記
- hbase shell常用命令總結
- 命令列中的常用操作命令列
- 實驗-shell執行資料庫命令.TXT資料庫
- Mysql資料庫基礎操作命令MySql資料庫
- 使用命令列建立資料庫命令列資料庫
- 海量列式非關聯式資料庫HBase 架構,shell與API資料庫架構API
- 安裝HBase資料庫資料庫
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- 資料庫-SHELL資料庫
- MYSQL資料庫常用操作命令節選MySql資料庫
- 資料庫維護常用操作命令1-表操作資料庫
- Hbase資料庫安裝部署資料庫
- linux Shell 命令列-03-array Shell 陣列Linux命令列陣列
- 【甘道夫】HBase基本資料操作詳解
- cmd命令列下用命令執行SQL指令碼到SQL Server資料庫中命令列SQL指令碼Server資料庫
- 在資料庫命令列中使用作業系統命令資料庫命令列作業系統
- Shell指令碼中執行sql語句操作MySQL資料庫的幾個方法指令碼MySql資料庫