我编写了一个脚本来计算每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
答案 0 :(得分:2)
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命令{{1} }后跟disable X
。
答案 1 :(得分:0)
在电信公司工作期间,我经常需要与各种没有任何API的CLI工具进行交互。几乎所有像expect这样的案例都是完美的工具。所以它可以在风格上工作,期待提示&#39;那么&#39;写命令&#39;然后&#39;收集输出&#39;。对于高级脚本,有一种方法可以将它与TCL语言结合起来。
对我而言,它曾经允许使用几个仅通过SSH可用的路由器来控制分布式设置。所以这绝对是你可以使用的方法,问题是它是不是太强大了。
其他替代方法是将HBase shell的脚本准备到外部文件中,然后使用输出处理执行它。可以肯定的是,它是努力和结果的最佳组合。