`
zhang_xzhi_xjtu
  • 浏览: 538412 次
  • 性别: 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

    1. **bin** 目录:包含HBase的可执行脚本,如`start-hbase.sh`用于启动HBase,`stop-hbase.sh`用于停止服务,以及`hbase`命令行工具。 2. **conf** 目录:这是存放HBase配置文件的地方。你需要在这里配置`hbase-...

    hbase-0.94.27.tar.gz

    HBase是Apache软件基金会的一个开源项目,是一款基于Google Bigtable理念设计的分布式列式数据库,专为处理海量数据而设计。HBase属于Apache Hadoop生态系统的一部分,与HDFS(Hadoop Distributed File System)紧密...

    hbase-0.94.18

    在这个绝版的"Hbase-0.94.18"版本中,我们可以深入了解早期HBase的设计思想和功能特性。 1. **分布式存储**: HBase是一种分布式、多版本、列导向的NoSQL数据库。它将数据存储在表中,由行键、列族、列和时间戳组成...

    HBase 0.94.18 API.chm

    HBase api

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

    2. 指定HBase使用的Hadoop配置目录:`<property><name>hbase.rootdir</name><value>hdfs://localhost:9000/hbase</value></property>` 3. 配置Zookeeper地址:`<property><name>hbase.zookeeper.quorum</name><value...

    hbase-2.0.0.3.0.0.0-1634-bin.tar.gz

    《HBase 2.0.0.3.0.0.0-1634 在 Ambari 2.7.x 下的编译与使用详解》 HBase,全称Apache HBase,是一款构建在Hadoop文件系统之上的分布式、版本化、列族式存储系统,主要用于处理大规模数据。它提供了高度可靠性和高...

    hbase-0.94.0.jar

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

    hbase-site.xml.doc

    * hbase.master.logcleaner.plugins:org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner, org.apache.hadoop.hbase.master.cleaner.TimeToLiveProcedureWALCleaner,这个参数指定了预写日志的清理插件。...

    HBase实战_Cn.pdf

    HBase实战_Cn.pdf

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

    确保HBase和Hadoop版本兼容是成功部署的关键,因为不兼容的版本可能会导致各种问题,如数据丢失、性能下降或服务不可用。在实际生产环境中,应该根据项目需求选择合适的HBase和Hadoop版本,以保证系统的稳定性和高效...

    hbase资料_hbase-default.xml.zip

    `hbase.client.retries.number`是客户端重试次数,决定在网络不稳定或服务器繁忙时的容错能力。 7. **刷写与合并策略**:`hbase.hregion.flushsize`设定Region刷写到HDFS的阈值,`hbase.hregion.majorcompaction....

    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....

    08 安装配置hbase0.94.9

    - 在Master节点的 `/usr/hbase/bin` 目录下,使用 `start-hbase.sh` 脚本启动HBase集群,用 `stop-hbase.sh` 脚本停止服务。如果不能正常停止,可能需要手动杀死相关进程。 7. **测试HBase**: - 打开HBase Shell...

    hbase-2.4.11-src.tar.gz

    HBase的设计理念源于Google的Bigtable,但在开源社区的努力下,已经发展成为了一个独立且功能强大的系统,广泛应用于互联网、电信、金融等多个领域的大数据存储与分析。 源码分析: 1. **模块结构**: `hbase-...

    hbase-1.2.1-bin.tar.gz.zip

    总之,HBase-1.2.1的二进制压缩包提供了在Hadoop环境下部署和运行HBase所需的所有组件,适用于处理大量非结构化或半结构化数据的场景,如实时分析、日志处理、物联网应用等。正确解压并配置后,用户可以充分利用...

    hbase-1.4.10-bin.tar.gz

    创建一个新文件或根据需求修改已存在的配置,例如设置HBase的主节点(`hbase.master`)和Zookeeper地址(`hbase.zookeeper.quorum`): ```xml <name>hbase.rootdir <value>hdfs://namenode_host:port/hbase ...

    HBase2集群配置.pdf

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

    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

    最新版linux hbase-2.3.3-bin.tar.gz

    例如,设置HDFS为默认的Hadoop安装:`<property><name>hbase.rootdir</name><value>hdfs://namenode_host:port/hbase</value></property>`。 启动HBase集群,需要启动Zookeeper和HBase守护进程: ```bash # 启动...

    pinpoint的hbase初始化脚本hbase-create.hbase

    搭建pinpoint需要的hbase初始化脚本hbase-create.hbase

Global site tag (gtag.js) - Google Analytics