簡體   English   中英

如何在不每次調用 shell 的情況下循環 HBase shell 中的命令

[英]How to loop through commands in HBase shell without invoking the shell each time

我編寫了一個腳本來計算每 2 小時有多少記錄插入到 3 個單獨的 HBase 表中。 我知道它是劣質的,但它運行良好,我檢索了所需的結果......但是我每次在循環中工作時都必須調用 HBase shell。

有沒有辦法改進我的代碼,這樣我就不必這樣做來加快速度?

#!/bin/bash

declare -a hbaseTables=("table1" "table2" "table3");
for i in "${hbaseTables[@]}"
  do
        echo $i >> results.txt
        time=1431925200000
        for ((x=0; x<2; x=x+1))
          do
                hbase shell <<EOF | tail -2 | grep -oE "^[0-9]+" >> results.txt
                scan '$i', {TIMERANGE => [$time,$time+7199999]}
EOF
                time=$time+7200000
          done
    echo ----- >> results.txt
  done

HBase shell 是用 Ruby 編寫的,因此您可以完全訪問任何 Ruby 命令。

因此,例如,如果我想刪除集群中不以字符串 dev01 開頭的所有表,我可以這樣做:

$ echo 'a=list; a.delete_if{ |t| t=~/dev01.*/}; \
     a.each{ |t| disable t; drop t}; quit;' | hbase shell

上述使副本list陣列成a 然后它將刪除所復制的陣列中, a與啟動,所有的元素dev01 ,然后將其循環通過在剩余元素a並運行HBase的外殼命令disable X隨后drop X

在電信工作期間,我經常需要與各種沒有任何 API 的 CLI 工具進行交互。 對於幾乎所有這樣的情況, expect是一個完美的工具。 所以它可以在“期望提示”然后“寫命令”然后“收集輸出”的風格下工作。 對於高級腳本,有一種將其與 TCL 語言結合的方法。

對我來說,它曾經允許使用僅通過 SSH 可用的幾個路由器來控制分布式設置。 所以這絕對是你可以使用的方法,問題是它是否太強大了。

另一種選擇是將 HBase shell 的腳本准備到外部文件中,然后通過輸出處理執行它。 也許這是努力和結果的最佳組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM