分享

hadoop 2.5.0 + hbase 0.98.5,提示ERROR HBaseClient: The znode f...

如题,在单机上配置好hadoop,zookeeper和hbase伪分布式之后,各项服务启动正常。hbase shell可写可查,hdfs上也可察看写入的文件,可是之后准备集成opentsdb的环境,结果在开启tsd进程时,提示错误:
  1. ERROR [main-EventThread] HBaseClient: The znode for the -ROOT- region doesn't exist!
复制代码

不断重复的提示上述错误, 那估计就是hbase配置中可能存在问题,可是明明hbase可以使用运行一些读写小程序,这个znode问题可能有哪些原因?在那里可以察看? 希望论坛的大神们能够不吝指教~~谢谢~!

已有(30)人评论

跳转到指定楼层
howtodown 发表于 2014-9-9 22:50:53
问题应该是zookeeper的配置
回复

使用道具 举报

roant 发表于 2014-9-10 09:51:10
howtodown 发表于 2014-9-9 22:50
问题应该是zookeeper的配置

zookeeper设置的是独立启动,在zookeeper3.4.6/conf文件夹下,zoo.cfg配置添加了三行:
1. server.1=localhost:2888:3888
2. dataDir=/home/roant-hit/DATA/zookeeper
3. dataLogDir=/usr/local/zookeeper-3.4.6/logs  (zookeeper安装目录下自建的logs文件夹)
其中server.1表示本机(三者都在一台机器上),并且在dataDir的目录下新建“myid”文件,内容为: 1  。
dataLogDir目录下产生了一些不可察看的文件。
启动顺序 :hadoop——>zookeeper——>hbase
请问大神,那个地方还没做到位,需要再配置的,谢谢回复~

回复

使用道具 举报

howtodown 发表于 2014-9-10 11:48:06
本帖最后由 howtodown 于 2014-9-10 11:49 编辑


可以看下面代码,下面函数的作用是把zookeeper的watch来监控ROOT region。

在hbase伪分布中,你的hbase分布式
还有下面的属性你是true,还是false

hbase.cluster.distributed 设置为 true


* Puts a watch in ZooKeeper to monitor the file of the -ROOT- region.
      * This method just registers an asynchronous callback.
      */
-    private void getRootRegion() {
-      final AsyncCallback.DataCallback cb = new AsyncCallback.DataCallback() {
-        @SuppressWarnings("fallthrough")
-        public void processResult(final int rc, final String path,
-                                  final Object ctx, final byte[] data,
-                                  final Stat stat) {
-          if (rc == Code.NONODE.intValue()) {
-            LOG.error("The znode for the -ROOT- region doesn't exist!");
-            retryGetRootRegionLater(this);
-            return;
-          } else if (rc != Code.OK.intValue()) {
-            LOG.error("Looks like our ZK session expired or is broken, rc="
-                      + rc + ": " + Code.get(rc));
-            disconnectZK();
-            connectZK();
-            return;
-          }
-          if (data == null || data.length == 0 || data.length > Short.MAX_VALUE) {
-            LOG.error("The location of the -ROOT- region in ZooKeeper is "
-                      + (data == null || data.length == 0 ? "empty"
-                         : "too large (" + data.length + " bytes!)"));
+    final class ZKCallback implements AsyncCallback.DataCallback {
+
+      @SuppressWarnings("fallthrough")
+      public void processResult(final int rc, final String path,
+                                final Object ctx, final byte[] data,
+                                final Stat stat) {
+        if (rc == Code.NONODE.intValue()) {
+          LOG.error("The znode for the -ROOT- region doesn't exist!");
+          retryGetRootRegionLater(this);
+          return;
+        } else if (rc != Code.OK.intValue()) {
+          LOG.error("Looks like our ZK session expired or is broken, rc="
+                    + rc + ": " + Code.get(rc));
+          disconnectZK();
+          connectZK();
+          return;
+        }
+        if (data == null || data.length == 0 || data.length > Short.MAX_VALUE) {
+          LOG.error("The location of the -ROOT- region in ZooKeeper is "
+                    + (data == null || data.length == 0 ? "empty"
+                       : "too large (" + data.length + " bytes!)"));
+          retryGetRootRegionLater(this);
+          return;  // TODO(tsuna): Add a watch to wait until the file changes.
+        }
+        // There are 3 cases.  Older versions of HBase encode the location
+        // of the root region as "host:port", 0.91 uses "host,port,startcode"
+        // and newer versions of 0.91 use "<metadata>host,port,startcode"
+        // where the <metadata> starts with MAGIC, then a 4 byte integer,
+        // then that many bytes of meta data.
+        boolean newstyle;     // True if we expect a 0.91 style location.
+        final short offset;   // Bytes to skip at the beginning of data.
+        short firstsep = -1;  // Index of the first separator (':' or ',').
+        if (data[0] == MAGIC) {
+          newstyle = true;
+          final int metadata_length = Bytes.getInt(data, 1);
+          if (metadata_length < 1 || metadata_length > 65000) {
+            LOG.error("Malformed meta-data in " + Bytes.pretty(data)
+                      + ", invalid metadata length=" + metadata_length);
             retryGetRootRegionLater(this);
             return;  // TODO(tsuna): Add a watch to wait until the file changes.
           }
-          // There are 3 cases.  Older versions of HBase encode the location
-          // of the root region as "host:port", 0.91 uses "host,port,startcode"
-          // and newer versions of 0.91 use "<metadata>host,port,startcode"
-          // where the <metadata> starts with MAGIC, then a 4 byte integer,
-          // then that many bytes of meta data.
-          boolean newstyle;     // True if we expect a 0.91 style location.
-          final short offset;   // Bytes to skip at the beginning of data.
-          short firstsep = -1;  // Index of the first separator (':' or ',').
-          if (data[0] == MAGIC) {
-            newstyle = true;
-            final int metadata_length = Bytes.getInt(data, 1);
-            if (metadata_length < 1 || metadata_length > 65000) {
-              LOG.error("Malformed meta-data in " + Bytes.pretty(data)
-                        + ", invalid metadata length=" + metadata_length);
-              retryGetRootRegionLater(this);
-              return;  // TODO(tsuna): Add a watch to wait until the file changes.
-            }
-            offset = (short) (1 + 4 + metadata_length);
-          } else {
-            newstyle = false;  // Maybe true, the loop below will tell us.
-            offset = 0;
-          }
-          final short n = (short) data.length;
-          // Look for the first separator.  Skip the offset, and skip the
-          // first byte, because we know the separate can only come after
-          // at least one byte.
-          loop: for (short i = (short) (offset + 1); i < n; i++) {
-             switch (data) {
-              case ',':
-                newstyle = true;
-                /* fall through */
-              case ':':
-                firstsep = i;
-                break loop;
-            }
-          }
-          if (firstsep == -1) {
-            LOG.error("-ROOT- location doesn't contain a separator"
-                      + " (':' or ','): " + Bytes.pretty(data));
-            retryGetRootRegionLater(this);
-            return;  // TODO(tsuna): Add a watch to wait until the file changes.
+          offset = (short) (1 + 4 + metadata_length);
+        } else {
+          newstyle = false;  // Maybe true, the loop below will tell us.
+          offset = 0;
+        }
+        final short n = (short) data.length;
+        // Look for the first separator.  Skip the offset, and skip the
+        // first byte, because we know the separate can only come after
+        // at least one byte.
+        loop: for (short i = (short) (offset + 1); i < n; i++) {
+           switch (data) {
+            case ',':
+              newstyle = true;
+              /* fall through */
+            case ':':
+              firstsep = i;
+              break loop;
           }
-          final String host;
-          final short portend;  // Index past where the port number ends.
-          if (newstyle) {
-            host = new String(data, offset, firstsep - offset);
-            short i;
-            for (i = (short) (firstsep + 2); i < n; i++) {
-              if (data == ',') {
-                break;
-              }
+        }
+        if (firstsep == -1) {
+          LOG.error("-ROOT- location doesn't contain a separator"
+                    + " (':' or ','): " + Bytes.pretty(data));
+          retryGetRootRegionLater(this);
+          return;  // TODO(tsuna): Add a watch to wait until the file changes.
+        }
+        final String host;
+        final short portend;  // Index past where the port number ends.
+        if (newstyle) {
+          host = new String(data, offset, firstsep - offset);
+          short i;
+          for (i = (short) (firstsep + 2); i < n; i++) {
+            if (data == ',') {
+              break;
             }
-            portend = i;  // Port ends on the comma.
-          } else {
-            host = new String(data, 0, firstsep);
-            portend = n;  // Port ends at the end of the array.
-          }
-          final int port = parsePortNumber(new String(data, firstsep + 1,
-                                                      portend - firstsep - 1));
-          final String ip = getIP(host);
-          if (ip == null) {
-            LOG.error("Couldn't resolve the IP of the -ROOT- region from "
-                      + host + " in \"" + Bytes.pretty(data) + '"');
-            retryGetRootRegionLater(this);
-            return;  // TODO(tsuna): Add a watch to wait until the file changes.
           }
-          LOG.info("Connecting to -ROOT- region @ " + ip + ':' + port);
-          final RegionClient client = rootregion = newClient(ip, port);
-          final ArrayList<Deferred<Object>> ds = atomicGetAndRemoveWaiters();
-          if (ds != null) {
-            for (final Deferred<Object> d : ds) {
-              d.callback(client);
-            }
+          portend = i;  // Port ends on the comma.
+        } else {
+          host = new String(data, 0, firstsep);
+          portend = n;  // Port ends at the end of the array.
+        }
+        final int port = parsePortNumber(new String(data, firstsep + 1,
+                                                    portend - firstsep - 1));
+        final String ip = getIP(host);
+        if (ip == null) {
+          LOG.error("Couldn't resolve the IP of the -ROOT- region from "
+                    + host + " in \"" + Bytes.pretty(data) + '"');
+          retryGetRootRegionLater(this);
+          return;  // TODO(tsuna): Add a watch to wait until the file changes.
+        }
+        LOG.info("Connecting to -ROOT- region @ " + ip + ':' + port);
+        final RegionClient client = rootregion = newClient(ip, port);
+        final ArrayList<Deferred<Object>> ds = atomicGetAndRemoveWaiters();
+        if (ds != null) {
+          for (final Deferred<Object> d : ds) {
+            d.callback(client);
           }
-          disconnectZK();
-          // By the time we're done, we may need to find -ROOT- again.  So
-          // check to see if there are people waiting to find it again, and if
-          // there are, re-open a new session with ZK.
-          // TODO(tsuna): This typically happens when the address of -ROOT- in
-          // ZK is stale.  In this case, we should setup a watch to get
-          // notified once the znode gets updated, instead of continuously
-          // polling ZK and creating new sessions.
-          synchronized (ZKClient.this) {
-            if (deferred_rootregion != null) {
-              connectZK();
-            }
+        }
+        disconnectZK();
+        // By the time we're done, we may need to find -ROOT- again.  So
+        // check to see if there are people waiting to find it again, and if
+        // there are, re-open a new session with ZK.
+        // TODO(tsuna): This typically happens when the address of -ROOT- in
+        // ZK is stale.  In this case, we should setup a watch to get
+        // notified once the znode gets updated, instead of continuously
+        // polling ZK and creating new sessions.
+        synchronized (ZKClient.this) {
+          if (deferred_rootregion != null) {
+            connectZK();
           }
         }
-      };
+      }
+    }

回复

使用道具 举报

sstutu 发表于 2014-9-10 11:56:29
本帖最后由 pig2 于 2014-9-10 12:33 编辑
按照这种形式来配置一下:
根据自己的实际情况修改
server.1=192.168.1.201:2888:3888
server.2=192.168.1.201:2889:3889
server.3=192.168.1.201:2890:3890

回复

使用道具 举报

pig2 发表于 2014-9-10 12:34:00
可以试试楼上的方法
回复

使用道具 举报

roant 发表于 2014-9-10 13:55:10
回复

使用道具 举报

roant 发表于 2014-9-10 13:56:23
howtodown 发表于 2014-9-10 11:48
可以看下面代码,下面函数的作用是把zookeeper的watch来监控ROOT region。

在hbase伪分布中,你的hbas ...

该选项之前就已经设置为  true

回复

使用道具 举报

lzw 发表于 2014-9-10 14:38:53
roant 发表于 2014-9-10 13:55
关闭了hbase和zookeeper服务,按照你给的方法,在zookeeper的zoo.cg中改动为本机ip后,又改动hbase-site. ...


使用下面命令,看看root表的情况
  1. scan '-ROOT-'
复制代码



回复

使用道具 举报

lzw 发表于 2014-9-10 14:52:14
如果解决不了的话,需要从自己的配置和自己的操作、环境入手了。
下面的两个帖子可以参考

ZooKeeper介绍、伪分布式集群安装及使用


详细了解HBase zookeeper和-Root-/.MET表

回复

使用道具 举报

1234下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条