分享

如何查看zookeeper中存放的hbase的-ROOT-的位置信息

pengsuyun 发表于 2014-12-30 17:00:56 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 15 132337
如题,如我们所知,hbase的-ROOR-的regionserver的位置信息存储在zookeeper中,hbase在zookeeper下的znode信息如图,但是我不知道哪个znode记录了这个信息,而且我查看过meta-region-server中存的数据,由于不清楚他的数据类型,也看不到具体的数据。
求教了。

hbase在zookeeper的znode信息.jpg

已有(15)人评论

跳转到指定楼层
pengsuyun 发表于 2014-12-30 19:41:50
不过我倒是可以确定了,meta-region-server这个znode存储的就是-ROOT-的信息,
之前的hbase版本用的是root-region-server ,在我这个版本已经改掉了。
具体看链接:http://blog.cloudera.com/blog/2013/10/what-are-hbase-znodes/


版本变了.jpg
回复

使用道具 举报

gefieder 发表于 2014-12-30 17:27:31

到下面目录中找找

  1. <property>
  2. <name>hbase.zookeeper.property.dataDir</name>
  3. <value>zkdata目录</value>
  4. </property>
复制代码




回复

使用道具 举报

gefieder 发表于 2014-12-30 17:31:20

也就是这个目录:查看下zoo.cfg,你就能找到了。



  1. cat zoo.cfg
复制代码


  1. # 数据目录dataDir
  2. dataDir=/data/zookeeper
复制代码



回复

使用道具 举报

pengsuyun 发表于 2014-12-30 17:34:27
gefieder 发表于 2014-12-30 17:31
也就是这个目录:查看下zoo.cfg,你就能找到了。

这个不可读的吧,我想问,怎么看具体的内容。
回复

使用道具 举报

tntzbzc 发表于 2014-12-30 17:51:42
pengsuyun 发表于 2014-12-30 17:34
这个不可读的吧,我想问,怎么看具体的内容。
hbase zookeeper怎么配置的,贴出信息来。

楼上说的,楼主看不了是啥意思?

回复

使用道具 举报

pengsuyun 发表于 2014-12-30 17:55:31
tntzbzc 发表于 2014-12-30 17:51
hbase zookeeper怎么配置的,贴出信息来。

楼上说的,楼主看不了是啥意思?

应该这三张图是你想要看的东西了。
hbase-site.jpg
meta-region-server的内容.jpg
zoo.cfg.jpg
回复

使用道具 举报

desehawk 发表于 2014-12-30 18:23:15
尝试这三种方式

第一种:通过hdfs
查看Hbase根目录.

[hadoop@HADOOPCLUS01 bin]$ hadoop fs -ls hadoop fs -ls /hbase
Found 37 items
drwxr-xr-x   - hadoop cug-admin          0 2013-03-27 09:29 /hbase/-ROOT-
drwxr-xr-x   - hadoop cug-admin          0 2013-03-27 09:29 /hbase/.META.
drwxr-xr-x   - hadoop cug-admin          0 2013-03-26 13:15 /hbase/.corrupt
drwxr-xr-x   - hadoop cug-admin          0 2013-03-27 09:48 /hbase/.logs
drwxr-xr-x   - hadoop cug-admin          0 2013-03-30 17:49 /hbase/.oldlogs
drwxr-xr-x   - hadoop cug-admin          0 2013-03-30 17:49 /hbase/splitlog
drwxr-xr-x   - hadoop cug-admin          0 2013-03-30 17:49 /hbase/USER_TEST_TABLE


第二种通过hbase shell

1.png


第三种通过代码:

  1. private HRegionLocation locateRegion(final byte [] tableName,
  2.       final byte [] row, boolean useCache)
  3.     throws IOException {
  4.         .......
  5.         //检查下都应的zkTracker是否启动
  6.       ensureZookeeperTrackers();
  7.         //如果是-ROOT-表,则通过zk节点/hbase/root-region-server获取-ROOT-表所在的Location
  8.       if (Bytes.equals(tableName, HConstants.ROOT_TABLE_NAME)) {
  9.         try {
  10.                 //通过zk的getData接口拿节点数据,此处会等待节点数据就位或者超时
  11.           ServerName servername = this.rootRegionTracker.waitRootRegionLocation(this.rpcTimeout);
  12.           LOG.debug("Looked up root region location, connection=" + this +
  13.             "; serverName=" + ((servername == null)? "": servername.toString()));
  14.           if (servername == null) return null;
  15.         //返回一个拼装的HRegionLocation,因为-ROOT-表只有一个region,而且不会split
  16.           return new HRegionLocation(HRegionInfo.ROOT_REGIONINFO,
  17.             servername.getHostname(), servername.getPort());
  18.         } catch (InterruptedException e) {
  19.           Thread.currentThread().interrupt();
  20.           return null;
  21.         }
  22.       }
  23.         //如果是.META.表,则请求.META.表,这里的row其实就是请求row拼装的regionName,类似test,key1,99999999999999
  24.         //如果没命中cache,则继续请求-ROOT-表,拿到这个row对应的.META.表的region location
  25.       else if (Bytes.equals(tableName, HConstants.META_TABLE_NAME)) {
  26.         return locateRegionInMeta(HConstants.ROOT_TABLE_NAME, tableName, row,
  27.             useCache, metaRegionLock);
  28.       }
  29.         //如果是用户表,则请求用户表,这里的row就是key1
  30.         //如果没命中cache,则请求.META.表,获取该row对应的region location
  31.       else {
  32.         // Region not in the cache - have to go to the meta RS
  33.         return locateRegionInMeta(HConstants.META_TABLE_NAME, tableName, row,
  34.             useCache, userRegionLock);
  35.       }
  36.     }
复制代码









回复

使用道具 举报

pengsuyun 发表于 2014-12-30 18:50:08
本帖最后由 pengsuyun 于 2014-12-30 18:51 编辑
desehawk 发表于 2014-12-30 18:23
尝试这三种方式

第一种:通过hdfs

版主的第二种办法,在我的版本(0.98.9-hadoop2)中我试过了,是行不通的。
第一种办法的话,看hbase这个有用吗?在hdfs下的hbase这个我感觉从理论上就走不通了。-ROOT-的位置信息是放在zookeeper下面的
第三种方法,这个没试过,好像也不知道怎么试,能具体点吗?
回复

使用道具 举报

nettman 发表于 2014-12-30 18:51:34
本帖最后由 nettman 于 2014-12-30 18:53 编辑


Region定位流程:
184548g5z0fo11lul9qe5k.png
寻找RegionServer

ZooKeeper--> -ROOT-(单Region)--> .META.--> 用户表


想这个存储在了zookeeper file中,也就是znode,信息肯定在这里面的。

所以楼主在配置的时候,找到znode里面的信息即可。-ROOT-表,则通过zk节点root-region-server获取-ROOT-表所在的Location



回复

使用道具 举报

pengsuyun 发表于 2014-12-30 18:56:58
nettman 发表于 2014-12-30 18:51
Region定位流程:

寻找RegionServer

在zookeeper的/hbase下的znode中我觉得meta-region-server这个最有可能存了-ROOR-的地址
但是这里面的数据类型不知道是什么,所以查看不到具体的信息。

我还查看了其他的节点,有些节点是有数据的,但是用get 命令看数据是乱码的。
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条