如何确定HBase在启动后何时准备就绪?

时间:2015-02-19 12:58:34

标签: linux bash hbase

我想要一个依赖于HBase的软件,并且只有在它完全启动并为业务做好准备之后才能启动它,但似乎start-hbase.sh在此之前返回。

有没有办法检查/等待HBase状态?

我尝试了类似echo "status" | hbase shell的内容,但在HBase离线时它并没有返回。我希望获得状态代码或文字,说明它是否准备就绪。

2 个答案:

答案 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