W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Apache HBase Shell 是在(J)Ruby 的 IRB 的基礎上增加了一些 HBase 特定的命令。你可以在 IRB 中做的任何事情,都可以在 HBase Shell 中完成。
要運行 HBase shell,請執(zhí)行如下操作:
$ ./bin/hbase shell
輸入:help,然后按 <RETURN> 查看 shell 命令和選項的列表。至少瀏覽器幫助輸出末尾的段落,了解如何將變量和命令參數(shù)輸入到 HBase shell 中;尤其要注意表名、行和列等是如何引用的。
請參閱本教程中的快速啟動HBase章節(jié)的“shell 練習”部分。
有關腳本編寫 Apache HBase 的示例,請查看 HBase bin 目錄;查看以* .rb結尾的文件,要運行這些文件之一,請執(zhí)行如下操作:
$ ./bin/hbase org.jruby.Main PATH_TO_SCRIPT
HBase Shell(HBASE-11658)添加了一種新的非交互模式。非交互模式捕獲 HBase Shell 命令的退出狀態(tài)(成功或失敗),并將該狀態(tài)返回給命令解釋器。如果您使用正常的交互模式,HBase Shell 將只會返回自己的退出狀態(tài),這幾乎總是會0成功的。
要調(diào)用非交互模式,請將 -n 或 --non-interactive 選項傳遞給 HBase Shell。
您可以在操作系統(tǒng)腳本解釋器中使用 HBase shell,例如 Bash shell,它是大多數(shù) Linux 和 UNIX 發(fā)行版的默認命令解釋程序。以下準則使用 Bash 語法,但可以調(diào)整為使用 C 樣式的 shell(例如 csh 或 tcsh),并且可能會修改為使用 Microsoft Windows 腳本解釋器一起使用。
注意:以這種方式生成 HBase Shell 命令的速度很慢,所以在決定何時將 HBase 操作與操作系統(tǒng)命令行相結合時,請記住這一點。
示例——將命令傳遞給 HBase Shell
您可以使用 echo 命令和 |(管道)操作,以非交互模式將命令傳遞到 HBase Shell。一定要轉義 HBase 命令中的字符,否則 shell 將會解釋這些字符。一些調(diào)試級別的輸出已從下面的示例中截斷。
$ echo "describe 'test1'" | ./hbase shell -n
Version 0.98.3-hadoop2, rd5e65a9144e315bb0a964e7730871af32f5018d5, Sat May 31 19:56:09 PDT 2014
describe 'test1'
DESCRIPTION ENABLED
'test1', {NAME => 'cf', DATA_BLOCK_ENCODING => 'NON true
E', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0',
VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIO
NS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS =>
'false', BLOCKSIZE => '65536', IN_MEMORY => 'false'
, BLOCKCACHE => 'true'}
1 row(s) in 3.2410 seconds
若要取消所有輸出,請將其回顯到 /dev/null:
$ echo "describe 'test'" | ./hbase shell -n > /dev/null 2>&1
示例8——檢查腳本命令的結果
由于腳本不是設計為交互式運行的,因此您需要一種方法來檢查命令是失敗還是成功。HBase shell 使用為成功的命令返回值0的標準約定,并為失敗的命令返回一些非零值。Bash 將命令的返回值存儲在一個名為 $? 的特殊環(huán)境變量中。因為每次 shell 運行任何命令時都會覆蓋該變量,所以應該將結果存儲在另一個腳本定義的變量中。
下面的這個腳本展示了一種方法來存儲返回值并根據(jù)它做出決定:
#!/bin/bash
echo "describe 'test'" | ./hbase shell -n > /dev/null 2>&1
status=$?
echo "The status was " $status
if ($status == 0); then
echo "The command succeeded"
else
echo "The command may have failed."
fi
return $status
獲取退出代碼0意味著您腳本編寫的命令確實成功了。但是,獲取非零退出代碼并不一定意味著命令失敗。該命令可能已成功,但客戶端失去連接,或者其他事件阻礙了其成功。這是因為 RPC 命令是無狀態(tài)的。確保操作狀態(tài)的唯一方法是檢查。例如,如果你的腳本創(chuàng)建一個表,但返回一個非零的退出值,你應該檢查表是否實際創(chuàng)建,然后再試圖創(chuàng)建它。
您可以將 HBase Shell 命令輸入到文本文件中,每行一個命令,并將該文件傳遞給HBase Shell。
示例9——命令文件示例
create 'test', 'cf'
list 'test'
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
put 'test', 'row4', 'cf:d', 'value4'
scan 'test'
get 'test', 'row1'
disable 'test'
enable 'test'
示例10——指示HBase Shell執(zhí)行命令
將命令文件的路徑作為 hbase shell 命令的唯一參數(shù)傳遞。每個命令都會執(zhí)行并顯示其輸出。如果您未在腳本中包含該 exit 命令,則會返回到 HBase shell 提示符。沒有辦法以編程方式檢查每個單獨的命令是否成功或失敗。此外,盡管您看到每個命令的輸出,但命令本身并未回顯到屏幕,因此可能難以將命令與其輸出對齊。
$ ./hbase shell ./sample_commands.txt
0 row(s) in 3.4170 seconds
TABLE
test
1 row(s) in 0.0590 seconds
0 row(s) in 0.1540 seconds
0 row(s) in 0.0080 seconds
0 row(s) in 0.0060 seconds
0 row(s) in 0.0060 seconds
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1407130286968, value=value1
row2 column=cf:b, timestamp=1407130286997, value=value2
row3 column=cf:c, timestamp=1407130287007, value=value3
row4 column=cf:d, timestamp=1407130287015, value=value4
4 row(s) in 0.0420 seconds
COLUMN CELL
cf:a timestamp=1407130286968, value=value1
1 row(s) in 0.0110 seconds
0 row(s) in 1.5630 seconds
0 row(s) in 0.4360 seconds
您可以使用 HBASE_SHELL_OPTS 環(huán)境變量將 VM 選項傳遞到 HBase Shell 。您可以在您的環(huán)境中進行設置,例如通過編輯 ?/ .bashrc,或將其設置為啟動HBase Shell 的命令的一部分。以下的示例設置了幾個與垃圾回收相關的變量,僅用于運行 HBase Shell 的 VM 的生命周期。為了可讀性,該命令應該在單行中全部運行,但是會被 \ 字符打斷。
$ HBASE_SHELL_OPTS="-verbose:gc -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps \
-XX:+PrintGCDetails -Xloggc:$HBASE_HOME/logs/gc-hbase.log" ./bin/hbase shell
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: