我想要删除HBase中的所有表。我正在使用HBase shell命令执行此操作:
$ hbase shell
> disable_all .*
> drop_all .*
如何编写用于执行此操作的shell脚本?
注意:在执行上述命令时,它会在禁用和删除所有表之前要求用户确认,即y / n。
答案 0 :(得分:7)
我使用以下内容:
#!/bin/sh
echo -e "disable_all '.*'\ny" | hbase shell -n
echo -e "drop_all '.*'\ny" | hbase shell -n
echo的-e
标志使它处理转义序列,因此您可以在其中构建确认。 -n
告诉hbase shell这是一个非交互式会话。
答案 1 :(得分:6)
Shell脚本:deleteHbaseTables.sh
#!/bin/sh
echo "disable_all .* " | hbase shell
echo "drop_all .* " | hbase shell
答案 2 :(得分:3)
此脚本将从HBase获取所有表,并一次对1个表执行禁用和删除操作。
#Creating a temp file to store the output of "list" command.
echo "list" | hbase shell > tableListSummary.txt
#fetch only the list of tables and store it in an another temp file.
tail -1 tableListSummary.txt > tableList.txt
#Separate tables by commas and iterate to perform disable and drop commands.
cat tableList.txt | sed -n 1'p' | tr ',' '\n' | while read word; do
com=$(echo "$word" | sed 's/[][]//g')
table="${com#\"}"
table="${table%\"}"
echo $table
echo "disable '$table'" | hbase shell
echo "drop '$table'" | hbase shell
done
#removing temporary files
rm tableListSummary.txt tableList.txt
感谢。
答案 3 :(得分:2)
如果您使用的是带有“--non-interactive / -n”选项的hbase版本,请参阅Cloudera中的示例:
#!/bin/bash
echo 'list' | hbase shell -n
status=$?
if [$status -ne 0]; then
echo "The command may have failed."
fi
如果您使用的是没有“--non-interactive”的hbase 1.0.0,则可以从文件加载命令。 HBase documentation的示例:
echo "create 'test', 'cf'" > ./sample_commands.txt
hbase shell ./sample_commands.txt
答案 4 :(得分:1)
运行: “hbase shell< myfile.txt”
在屏幕上观察hbase输出。