bash—如何在hbase shell中循环执行命令,而无需每次调用shell

kmpatx3s  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(398)

我编写了一个脚本来计算每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
62o28rlo

62o28rlo1#

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 shell命令 disable X 然后 drop X .

42fyovps

42fyovps2#

在电信工作期间,我经常需要与各种没有任何api的cli工具进行交互。对于几乎所有这样的情况,expect是一个完美的工具。所以它可以按照“expect prompt”然后“write command”然后“collect output”的方式工作。对于高级脚本,可以将其与tcl语言相结合。
对我来说,它曾经允许通过ssh控制几个路由器的分布式设置。所以这绝对是你可以使用的方法,问题是它是否太强大。
另一种方法是将hbase shell的脚本准备到外部文件中,然后通过输出处理执行它。也许这是努力和结果的最佳结合。

相关问题