`
zhang_xzhi_xjtu
  • 浏览: 524853 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hbase 0.94.0 0.94.9 0.94.24 功能不兼容初步分析

阅读更多
hbase 0.94.0 0.94.9 0.94.24 功能不兼容初步分析

测试原因:
原有的simplehbase count测试代码当hbase从某个集团版本升级后,部分测试代码不通过,怀疑hbase的各个版本有兼容性问题。


测试环境:
0.94.0 0.94.9 0.94.24使用本机的独立部署hbase。 client 0.94.9


测试数据:

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	3               16	
	4                                32
	5               64               NULL
	6               NULL             128
	7               NULL             NULL
	8                                              "test"



Note:
多family的组合情况太多,不考虑,主要测试单family的情况。
文中涉及的filter。

        SingleColumnValueFilter filter = new SingleColumnValueFilter(
                ColumnFamilyNameBytes, QName1, CompareOp.GREATER_OR_EQUAL,
                new BinaryComparator(Bytes.toBytes(4L)));
        scan.setFilter(filter);


Scan

0.94.0 0.94.9 0.94.24
功能一致。

scan时startKey和endKey相等,则返回结果包含该key。
使用scan.addColumn()时,结果的keyvalue必须在qualifer中。因此使用一个不存在的Column时,scan不到任何结果。
当addColumn为Q1,选择出

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	3               16		
	5               64               NULL
	6               NULL             128
	7               NULL             NULL


使用scan.addFamily()时,结果的keyvalue必须在family中。


Scan with filter

使用scan.addColumn()时
0.94.0 0.94.9 一致
0.94.24和其他版本不一致

在0.94.0 0.94.9 中,当scan.addColumn()时,无论该column是否和filter中的column一致,该filter都是生效的。           
区别在于返回的行不同。

当addColumn为Q1,先选择出

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	3               16	
	5               64               NULL
	6               NULL             128
	7               NULL             NULL

然后filter出

	rowkey          f/q1            f/q2           f/q3 
	2               4                8
	3               16	
	5               64               NULL




当addColumn为Q2,先选择出

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	4                                32
	5               64               NULL
	6               NULL             128
	7               NULL             NULL

然后filter出

	rowkey          f/q1            f/q2           f/q3 
	2               4                8
	4                                32
	5               64               NULL



在0.94.24中,当scan.addColumn()时,如果column和filter中的column不一致,该filter不生效的。    

当addColumn为Q2,先选择出

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	4                                32
	5               64               NULL
	6               NULL             128
	7               NULL             NULL

然后filter不生效,返回结果。



使用scan.addFamily()时
3个版本功能一致。





Coprocessor
由于coprocessor的默认实现,会使用scan的family和qualifer,因此,使用coprocessor时必须进行设置。
正常的原生scan,hbase会检测到scan没有设置family时,会自动填充该HTable的所有family。

Count

使用scan.addColumn()时
0.94.0 0.94.9 0.94.24一致


使用0.94.0 0.94.9 0.94.24时,count的结果和addColumn没有关系。
该测试中都是返回8.
可以看做在数据全集上面count。

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	3               16	
	4                                32
	5               64               NULL
	6               NULL             128
	7               NULL             NULL
	8                                              "test"





使用scan.addFamily()时
3个版本功能一致。


Count with filter

使用scan.addColumn()时
0.94.0 0.94.9 0.94.24一致

使用0.94.0 0.94.9 0.94.24时,count的结果都是5。
可以看做在数据全集应用filter,然后count。

	rowkey          f/q1            f/q2           f/q3 	
	2               4                8
	3               16	
	4                                32
	5               64               NULL		
	8                                              "test"



这块hbase自己的3个版本一致。
但是count中的scan和原生scan的功能不一致。



使用scan.addFamily()时
3个版本功能一致。


Sum
3个版本功能一致。


Sum with Filter

使用scan.addColumn()时
0.94.0 0.94.9 一致
0.94.24和其他版本不一致

当使用0.94.0 0.94.9 时,

当addColumn为Q1,先选择出

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	3               16	
	5               64               NULL
	6               NULL             128
	7               NULL             NULL

然后filter出

	rowkey          f/q1            f/q2           f/q3 
	2               4                8
	3               16	
	5               64               NULL

加和为84.


当addColumn为Q2,先选择出
	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	4                                32
	5               64               NULL
	6               NULL             128
	7               NULL             NULL

然后filter出

	rowkey          f/q1            f/q2           f/q3 
	2               4                8
	4                                32
	5               64               NULL

加和为40.

当addColumn为Q3,先选择出

	rowkey          f/q1            f/q2           f/q3 
	8                                              "test"

然后filter出

	rowkey          f/q1            f/q2           f/q3 
	8                                              "test"

加和为null.


在0.94.24中,当scan.addColumn()时,如果column和filter中的column不一致,该filter不生效的。    

当addColumn为Q1,先选择出

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	3               16	
	5               64               NULL
	6               NULL             128
	7               NULL             NULL

然后filter出

	rowkey          f/q1            f/q2           f/q3 
	2               4                8
	3               16	
	5               64               NULL

加和为84.


当addColumn为Q2,先选择出

	rowkey          f/q1            f/q2           f/q3 
	1               1                2
	2               4                8
	4                                32
	5               64               NULL
	6               NULL             128
	7               NULL             NULL

filter不生效。
加和为170.


使用scan.addFamily()时
3个版本功能一致。


结论:


使用不同版本的hbase,需要对scan,filter,coprocessor做测试,以往的经验往往靠不住。
另外,欢迎大家提测试用例,我会添加到simplehbase测试代码里面。
这样,我们就有一个hbase测试代码库,可以在升级hbase时做回归测试。

simplehbase代码:
https://github.com/zhang-xzhi/simplehbase
分享到:
评论

相关推荐

    hbase-0.94.0.tar.gz

    hbase-0.94.0.tar.gz的安装包

    hbase-0.94.27.tar.gz

    hbase-0.94.27.tar.gz

    hbase-0.94.18

    官方网站上已经绝版的 hbase-0.94.18,限量发行。

    HBase 0.94.18 API.chm

    HBase api

    Hadoop-2.4.0+Hbase-0.94.18+Nutch-2.3集群爬虫配置攻略

    使用github中最新的nutch-2.x源码,奋战10天拿下的Hadoop-2.4.0+Hbase-0.94.18+Nutch-2.3配置...文档详细描述了三者版本不兼容问题的解决方案以及各个配置文件的详细配置。忠诚奉献给各位,如果有什么问题,请留言!

    hbase-0.94.0.jar

    HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储...

    《Hadoop大数据开发实战》教学教案—08HBase分布式存储系统.pdf

    《Hadoop大数据开发实战》教学教案—08HBase分布式存储系统.pdf《Hadoop大数据开发实战》教学教案—08HBase分布式存储系统.pdf《Hadoop大数据开发实战》教学教案—08HBase分布式存储系统.pdf《Hadoop大数据开发实战...

    hbase-2.0.2.3.1.4.0-315-bin.tar.gz

    ambari-2.7.5 编译过程中四个大包下载很慢,所以需要提前下载,包含:hbase-2.0.2.3.1.4.0-315-bin.tar.gz ,hadoop-3.1.1.3.1.4.0-315.tar.gz , grafana-6.4.2.linux-amd64.tar.gz ,phoenix-5.0.0.3.1.4.0-315....

    HBase不睡觉书.pdf HBase不睡觉书

    HBase不睡觉书.pdf HBase不睡觉书 pdf 有趣的讲解hbase应用,大数据学习必备。

    HBase2集群配置.pdf

    HBase2集群配置.pdf HBase2集群配置.pdf HBase2集群配置.pdf HBase2集群配置.pdf

    hbase-0.90.5.tar.gz与hadoop0.20.2版本匹配

    hbase-0.90.5.tar.gz与hadoop0.20.2版本匹配,我在我本地虚拟机已经安装成功可以使用。请放心下载!!!

    hbase-1.2.6.1-bin.tar.gz

    hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz

    HBase The Definitive Guide.pdf

    HBase The Definitive Guide.pdf HBase The Definitive Guide.pdf HBase The Definitive Guide.pdf

    HBase(hbase-2.4.9-bin.tar.gz)

    HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...

    hbase-1.2.1-bin.tar.gz.zip

    hbase-1.2.1-bin.tar.gz.zip 提示:先解压再使用,最外层是zip压缩文件

    阿里巴巴开源的Hbase Client node-hbase-client.zip

    当前状态:完全通过 HBase 0.94 和 0.94.16Java hbase-client支持 HBase 服务器的版本[√] 0.94.x[√] 0.94.0[√] 0.94.160.95.x0.96.x安装$ npm install hbase-client使用 CRUD:通过 zookeeper 创建 HBase ...

    hadoop-2.7.5,hbase1.2.6.zookeeper.3.3.6完全分布式安装教程

    hadoop-2.7.5,hbase1.2.6.zookeeper.3.3.6完全分布式安装教程 hadoop-2.7.5,hbase1.2.6.zookeeper.3.3.6完全分布式安装教程 hadoop-2.7.5,hbase1.2.6.zookeeper.3.3.6完全分布式安装教程

    hbase_py3.zip

    无奈没有积分,逐个问题修复,免费给大家,喜欢的点个赞,python3读取Hbase通过Thrift操作时用到hbase-thrift包,但是运行时报错IOError,ttypes,xrange,iteritems等错误。

    Packt.HBase.High.Performance.Cookbook.rar

    Packt.HBase.High.Performance.Cookbook, 包括pdf, azw3,epub,mobi四种格式。我也是下载了错误的格式后,找到的这个版本,希望能对其他人有所帮助。

    hbase-0.94.1.tar.gz

    hbase-0.94.1.tar.gz

Global site tag (gtag.js) - Google Analytics