cdh界面 hue 配置hbase_海量数据存储技术之HBase:使用HBase Shell操纵HBase
Apache HBase Shell是JRuby的IRB,并在此基礎上加入了HBase特有的命令。
JRuby是用Java實現的Ruby解釋器。通過JRuby,你可以在JVM上直接運行Ruby程序,調用Java的類庫。
IRB即interactive ruby,交互式Ruby。
運行HBase Shell:$ ./bin/hbase shell
例如,我使用CDH搭建的Hadoop集群,并且安裝了HBase;登錄后,在集群上直接使用命令:hbase shell
輸入命令:help ,然后回車,可以看到對各種命令的簡單描述。
輸入命令:help "COMMAND" 可看具體信息。
例:help "move"
常用命令舉例:
1) 查看表結構
desc '表名'
2)執行大合并
major_compact '表名'
3)列出Region
list_regions '表名'
看的不是很清晰,取一條:
SERVER_NAME:
bg87.cnki.com,16020,1539856447742
REGION_NAME:CNKI_Search201702,1412*1487792102000#1170222153901497888|4170222193201735373$,1539880666725.bbe3ff87712f654cb29a05243229effe.
START_KEY:1412*1487792102000#1170222153901497888|4170222193201735373$
END_KEY:
358*1487455399000#1161229194701353797|5170218220001766105$
SIZE:957
REQ:4705
LOCALITY:1.0
還可以有選擇性的輸出信息,例如只輸出服務器名稱,起始鍵
list_regions 'testtable', {}, ['SERVER_NAME', 'start_key','end_key']
4)移動Region
move 'ENCODED_REGIONNAME', 'SERVER_NAME'
找到ENCODED_REGIONNAME:
從REGION_NAME中找,上例中倒數第二個句點后的一段就是,即bbe3ff87712f654cb29a05243229effe
例:
move '8a5e97bcb910be18cf6f9e07f59816c6','bg84.cnki.com,16020,1539856459310'
5)修改表結構
例:將表CNKI_Search201701的COMPRESSION都改為snappy
alter 'CNKI_Search201701',{NAME => 'im', COMPRESSION => 'snappy'}, {NAME => 'fw', COMPRESSION => 'snappy'},{NAME => 'wf', COMPRESSION => 'snappy'}
6)列出所有表:
list
7) 查詢表行數
count '表名'
1使用Ruby編寫腳本
在HBase的bin目錄下可以找到以rb為后綴的腳本文件,為了運行這個腳本,可以使用命令
$ ./bin/hbase org.jruby.Main PATH_TO_SCRIPT
PATH_TO_SCRIPT是腳本路徑。
讓我看看bin目錄下的ruby腳本。
其實切換到bin目錄下,使用下面的命令也是可以的。
$ hbase-jruby SCRIPT
例如,$ hbase-jruby get-active-master.rb
讓我們看看hbase-jruby這個文件里有啥:
看,它其實封裝了org.jruby.Main。
2以非交互模式運行Shell
非交互模式會捕獲HBase Shell命令退出的狀態(成功或失敗),如果使用普通模式,那么HBase Shell總是返回它自己的執行狀態,大多數時候返回代表成功的數字0。
使用-n或--non-interactive選項開啟非交互模式。
不過我使用CDH安裝的HBase長時間無法返回。
3操作系統腳本中的HBase Shell
你可以在操作系統腳本中使用HBase Shell,比如Bash shell,這種大多數Linux和Unix默認的交互式命令接口。以下準則使用Bash語法,但可以調整,使其可同C樣式的shell一起使用,例如csh或tcsh,而且經過調整后,還可以和Microsoft Windows 腳本解釋器一起使用。
注意:以這種方式生成 HBase Shell 命令的速度很慢,所以要注意何時將HBase 操作與操作系統命令行相結合是合適的。
例,將命令傳遞給HBase Shell
使用echo命令和|(管道)操作,以非交互模式將命令傳遞給HBase Shell。務必要轉義HBase命令中的字符,否則shell將會解釋這些字符。
$ echo "describe 'test1'" | ./hbase shell -n
如果想抑制所有輸出,使用下面的命令:
$ echo "describe 'test'" | ./hbase shell -n > /dev/null 2>&1
例,檢查腳本命令執行結果
由于腳本沒有設計成交互式執行,所以需要一種方法來檢查命令是否執行成功。成功執行的命令返回0,失敗的命令返回非零值。Bash將命令的返回值存儲在一個名為 $? 的特殊環境變量中。因為每次shell執行任何命令時都會為該變量重新賦值,所以應該將結果存儲在另一個腳本定義的變量中。
不過,我們還應注意,成功執行的腳本返回值一定是0,但返回值非零不一定代表失敗。因為RPC(遠程過程調用)命令是無狀態的,所以有可能是客戶端連接斷開了,或者受其他是他事件的影響。最好的辦法就是,檢查執行結果,比如,你創建了一張表,但shell返回了一個非零值,那么你查下這個表是否已經存在了。
下面的這個腳本展示了一種存儲返回值的方法并根據返回值做出決定。
4從命令文件讀取HBase Shell命令
在txt文本中寫HBase Shell命令,一行一個命令,例如:
例,引導HBase Shell執行命令
將命令文件的路徑作為傳遞給hbase shell的唯一參數,如果腳本中不包含exit命令,則會返回提示符。無法以編程方式檢查每個單獨的命令是否成功。
5傳遞VM選項給Shell
使用HBASE_SHELL_OPTS環境變量將VM選項傳遞給HBase Shell 。在你的環境中進行設置HBASE_SHELL_OPTS,例如通過編輯 ?/ .bashrc,或將其設置為啟動HBase Shell 的命令的一部分。下面的示例設置了幾個與垃圾回收相關的變量,僅用于VM運行HBase Shell的時候。可以將命令寫成一行,如果命令很長的話,也可以使用字符將命令分隔為多行。
6重寫配置文件啟動HBase Shell
像hbase-2.0.5/hbase-2.1.3/hbase-2.2.0/hbase-1.4.10/hbase-1.5.0這幾個版本的HBase,通過傳遞帶有-D前綴的鍵值對,可以傳遞或重寫hbase-*.xml中的配置項,
7 Shell技巧
表變量
HBase 0.95增加了面向對象jruby風格的表引用Shell,以前所有的HBase Shell命令都是面向過程風格的,它總是把表名當做參數傳遞給命令。HBase 0.95引入了將表看做jruby變量這一特性,表引用可以用于數據讀寫操作,如put, scan, get,禁用表,刪表,描述表等。
HBase 0.95之前,你會這樣寫命令:
從HBase 0.95版本開始,你會這樣寫命令,就是講一個表賦給一個變量:
如果一個表已經創建了,可以使用get_table方法將其賦給一個變量
list命令也被擴展了,它能將表名集合拼接成字符串返回。可以使用jruby根據表名來操作表。list_snapshots命令與此相似。
irbrc文件
在主目錄下創建一個irbrc文件,添加自定義項,比較有用的是,記錄歷史命令。然后可以跨Shell調用。
如果不想將每個表達式的結果打印到stderr,可以這樣做,例如list命令返回的表集合。
日志數據的時間戳
從HBase日志文件中,將08/08/16 20:56:29,這種格式的日期轉換為時間戳
再轉成日期形式
Shell查詢配置
在Shell中設置配置
使用HBase Shell預分裂表
使用HBase Shell的create命令創建表時,可使用各種選項預先拆分表。
最簡單的方法是在創建表格時指定一個分割點數組。請注意,當將字符串直接量指定為分割點時,將根據字符串所代表的字節形式創建分割點。所以將“10”指定分割點,實際上指定“x3130”為分割點。
分割點集合將定義n+1個區域,其中n是分割點的數量。最低的區域包含了所有第一個分隔點之前的所有可能最低的鍵值,但不包含第一個分割點;下一個區域將包含從第一個分割點開始的鍵值,但不包括下一個分割點鍵值。以此類推,直到最后一個分割點。最后一個區域將從最后一個分割點開始直到最后的所有可能的最大鍵值。
在上面的例子中,將使用列族 "f" 創建表 "t1",預先拆分為四個區域。注意,第一個區域將包含從“x00”到“x30”(因為“x31”是“1”的 ASCII 碼)的所有鍵值。
可以使用文件傳遞分割點。下面的例子中,從本地文件系統的文件中讀取分割點。文件中,一行指定一個分割點鍵值。
其他選項是根據所需的區域數量和分割算法自動分割。HBase提供基于均勻拆分或十六進制密鑰的分割鍵值范圍算法,也可以提供自己的拆分算法來細分鍵值范圍。
HBase Shell實際是Ruby環境,可以使用Ruby腳本寫分割算法。
請注意,HBase Shell中的truncate命令在刪除并重建具有默認選項的表時會將任何預分割都丟棄。如果需要truncate預分割的表,刪除并重建表的時候,必須顯式地指定自定義分割選項。
調試
可以設置調試開關,以便可以輸出更多信息。例如想看到更多的異常棧追蹤信息,那么使用下面的命令:
hbase> debug
設置日志級別為DEBUG,使用下面的命令:
$ ./bin/hbase shell -d
Count命令
使用count查詢表大小時,指定正確的CACHE會查的更快
hbase> count '', CACHE => 1000
上面,一次拉取1000行。行數越多設置CACHE越小,默認一次取一行。
英文官方文檔見:http://hbase.apache.org/book.html#shell
總結
以上是生活随笔為你收集整理的cdh界面 hue 配置hbase_海量数据存储技术之HBase:使用HBase Shell操纵HBase的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 营口银行产品风险大吗?营口银行的产品介绍
- 下一篇: 别人捡到银行卡有用吗?银行卡丢了危险吗