我想要一个依赖于HBase的软件,并且只有在它完全启动并为业务做好准备之后才能启动它,但似乎start-hbase.sh在此之前返回。
有没有办法检查/等待HBase状态?
我尝试了类似echo "status" | hbase shell
的内容,但在HBase离线时它并没有返回。我希望获得状态代码或文字,说明它是否准备就绪。
答案 0 :(得分:0)
我们检查以下组件:
1)检查hbase/bin/hbase shell
是否有插入\列表' testtable':
echo "create 'testtable', {NAME=>'colfam'}" | hbase_home/bin/hbase shell
echo "list" | hbase_home/bin/hbase shell
2)hbase/bin/hbase hbck | grep "INCONSISTENT"
返回非零代码(所有hbase数据都是一致的)。
足以确保hbase准备就绪,但我现在正试图找到更简单的方法。
答案 1 :(得分:0)
我使用的方法是尝试创建表并一直尝试直到看到表已创建,但是我发现对于想要使用hbase的情况(许多单元测试),它的速度不必要地慢),因此我想使其更快。必须打开单独的hbase shell来创建表,然后再通过打开shell来删除表,从而降低了检查列表是否存在的速度,因此,我一直在尝试一种方法来在单个shell中完成所有操作执行。
此脚本将尝试创建表,但是如果由于某种原因无法创建表,由于-n
,它将立即以非零状态退出,这使其成为非交互式会话。它会一直持续到创建成功为止,然后立即清理测试表。
会喜欢这种方法的一些想法
echo "Waiting for HBase to be ready..."
isHBaseReady=1
while [ ${isHBaseReady} -ne 0 ]
do
echo "Testing table creation..."
echo -e "create 'testtable', 'cf'\ndisable 'testtable'\ndrop 'testtable'" | \
/opt/hbase-$HBASE_VERSION/bin/hbase shell -n > /dev/null 2>&1 && isHBaseReady=$?
done
echo "HBase is operational"
输出:
Waiting for HBase to be ready...
Testing table creation...
Testing table creation...
HBase is operational