HBase 如何Debug region

要想很好的理解HBase的代码,Debug Hbase的源码是最简单的方式,但很可惜的是HBase不能在Windows上运行(除非cygwin),即使用cygwin配置起来也很麻烦。而且即使用cygwin,HBase中最核心最关键的代码region部分也很难debug。

不过,本文提供的方法可以轻松在本地创建region对象,然后就可以直接调用方法进行debug啦。

首先说下原理:


我们知道Hbase中Master和RegionServer的主要作用就是partition、rpc,而每个Region可以看作一个微型的数据库内核。

region是相对独立的,接收上层的regionserver的指令。

这边Hbase做的很好,每个region可以只通过hdfs上的文件和目录初始化出来。

因此,我们首先要用hbaseclient的方式建立一张表。然后取出需要debug的region名字(从hdfs上读),最后以下几行代码就可创建一个自己独立的region对象。有了对象我们就能想干吗干吗啦,put,get,scan.flush,compact,split随便debug~

            //初始化配置文件
	    SpliterConfigurationFactory confFactory = SpliterConfigurationFactory.getInstance();
	    Configuration conf = confFactory.getSpliterConfiguration();
	    
	    //获得hbase的根目录,表名,初始化MetaUtil对象
	    Path rootdir = FSUtils.getRootDir(conf);
	    byte[] tableName = Bytes.toBytes("testmerge");
	    MetaUtils utils = new MetaUtils(conf);
	    //初始化 tableDescriptor对象
	    HTableDescriptor htd = FSTableDescriptors.getTableDescriptor(FileSystem.get(conf),
	  	      rootdir, tableName);
	    
	    // 拿到 该region的regionInfo,这边可以有很多方式。Hbase提供了很多方式
	    HTable table = new HTable(conf,tableName);
	    HRegionInfo ri = CommonTableUtil.getRegionInfo(Bytes.toBytes("testmerge,,1354183028220.9e1c0fd860d9dc5cd84c05831d770928."), table);
	    //获得Hlog对象
	    HLog log = utils.getLog();   
	    // 创建HRegion对象!!
	    HRegion r1 = HRegion.openHRegion(ri, htd, log, conf);
	    // Flush Region
	    r1.flushcache();
	    //r1.put(put);
	    
	    // Scan Region
	    Scan scan = new Scan();
	    InternalScanner s = r1.getScanner(scan);
	    try {
	      List<KeyValue> results = new ArrayList<KeyValue>();
	      boolean hasNext = true;
	      do {
	        hasNext = s.next(results);
	        for (KeyValue kv: results) {
	          System.out.println(Bytes.toStringBinary(kv.getRow()));
	          System.out.println(Bytes.toStringBinary(kv.getValue()));
	        }
	        results.clear();
	      } while (hasNext);
	    } finally {
	      s.close();
	    }




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值