hbase shell命令扩展

本文介绍了如何扩展HBase的Shell命令,以解决默认查询结果显示为二进制数据的问题。通过制定数据存储规则,并编写包含处理逻辑的Java和Ruby类,实现了自定义的`superscan`命令,该命令能根据预设规则格式化输出数据。文章还简要阐述了HBase、Ruby、JRuby和Java之间的关系,帮助读者理解这些技术在HBase Shell扩展中的作用。
摘要由CSDN通过智能技术生成

也许你还不清楚我在说什么,看一下下面的截图你就明白了:

 



好吧,如果您感兴趣,可以继续看下去了。


hbase是以字节数组的形式存储数据的,当你直接用API或通过hbase 自带的shell端去查询数据时,实际显示的是二进制数据的byteString的形式,就像这样:\xE5\x94\xAE\xE5\x90\x8E,当然,这肯定不是你想看到的结果。不过没办法,因为rowkey和value是用户自己定义的,包括类型,长度等,又因为存的是二进制数据,所以hbase自身api不可能解析出真实的数据,因为它不知道存取的规则。

我们要做的,就是要制定这种数据存储的规则,比如:rowkey由几个字段构成,每一个的类型,value的类型。值得一提的是几种数值型一旦类型一定,长度就定了,但string类型比较特殊,长度不是固定的。这里先使用一个字节存储长度,再紧跟着具体string串,当然这只是一种方式。value使用一个columfamily,因为官方也不建议使用太多。

以上的规则作为元数据放在xml配置文件里再好不过了,以后增加了hbase表,只需修改配置文件。

根据上面的规则写几个包含处理逻辑的类是必须的,包括读元数据,类型之间的转换方法等等。有了这些方法,就能在任何地方输出想要的数据,比如web前端。下面是以scan为例的hbase shell客户端具体实现思路:


1. 首先要在ruby/shell/commands下增加一个命令,姑且叫做superscan吧,直接对应一个JRuby脚本,定义一个Superscan类继承自Command,接收结果集并格式化输出。

内容如下:

module Shell
  module Commands
    class Superscan < Command
      def help
        return <<-EOF
此处省略若干打印的帮助信息
        EOF
      end

      def command(table, args = {})
        now = Time.now
        formatter.header(["READABLE_ROW", "READABLE(COLUMN+CELL)"])

        count = table(table).superscan(args) do |row, cells|
          formatter.row([ row, cells ])
        end

        formatter.footer(now, count)
      end
    end
  end
end


 

2.shell.rb脚本中的

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值