- 浏览: 538412 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
飞天奔月:
public List<String> gener ...
实践中的重构30_不做油漆匠 -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道public class A {
...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道在世界的中心呼喚愛 写道在classB ...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道在classB的finalize上打断 ...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
iteye比较少上,如果可以的话,可以发e-mail交流:ch ...
深入理解ReferenceQueue GC finalize Reference
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
测试数据:
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,选择出
使用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,先选择出
然后filter出
当addColumn为Q2,先选择出
然后filter出
在0.94.24中,当scan.addColumn()时,如果column和filter中的column不一致,该filter不生效的。
当addColumn为Q2,先选择出
然后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。
使用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。
这块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,先选择出
然后filter出
加和为84.
当addColumn为Q2,先选择出
然后filter出
加和为40.
当addColumn为Q3,先选择出
然后filter出
加和为null.
在0.94.24中,当scan.addColumn()时,如果column和filter中的column不一致,该filter不生效的。
当addColumn为Q1,先选择出
然后filter出
加和为84.
当addColumn为Q2,先选择出
filter不生效。
加和为170.
使用scan.addFamily()时
3个版本功能一致。
结论:
使用不同版本的hbase,需要对scan,filter,coprocessor做测试,以往的经验往往靠不住。
另外,欢迎大家提测试用例,我会添加到simplehbase测试代码里面。
这样,我们就有一个hbase测试代码库,可以在升级hbase时做回归测试。
simplehbase代码:
测试原因:
原有的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
发表评论
-
simplehbase v0.98.1开始支持hbase0.98
2014-12-29 21:52 781https://github.com/zhang-xzhi/s ... -
hbase轻量级中间件simplehbase v1.0简介
2014-12-13 18:56 951https://github.com/zhang-xzhi/s ... -
hbase的CoprocessorProtocol及一个简单的通用扩展实现V2
2014-12-04 18:02 865hbase中的CoprocessorProtocol机制. ... -
可以查看java对象的MemoryUtil简介
2014-09-14 21:01 1262MemoryUtil 关于java对象内存的基本知识,请参考 ... -
java对象的大小_基础知识
2014-09-14 20:59 988引言 Java的对象被jvm管理,单个对象如何布局,大小如何, ... -
gcviewer v0.3 一个解析CMS GC日志的GUI程序
2014-09-07 23:00 1089GCviewer https://github.com/z ... -
simplehbase版本变更
2014-07-14 13:42 740https://github.com/zhang-xzhi/s ... -
hbase ORM simplehbase/simplehbaseviewer v0.8简介及使用说明
2014-05-07 00:50 1035https://github.com/zhang-xzhi/s ... -
HBase Client使用注意点
2014-04-21 12:52 1957HBase Client使用注意点: 1 HTable线程 ... -
文件编码自动检测及编码转换encodechecker v0.5
2014-04-15 00:35 1825由于很多软件都不能准确自动识别文件编码,因此写了个文件编码识别 ... -
[perf] java常用基本操作性能测试-异常
2014-03-08 09:53 1160性能测试: 由于软硬件及其复杂,本结果只具有参考意义。 代码: ... -
[perf] java常用基本操作性能测试-反射
2014-03-07 13:06 1078性能测试: 由于软硬件及其复杂,本结果只具有参考意义。 代码: ... -
hbase轻量级中间件simplehbase v0.2简介
2013-12-22 17:58 1510https://github.com/zhang-xzhi/s ... -
mysql的一些性能数据
2012-12-01 16:04 974这个并不是一个严谨的性能测试,而是就简单的一些场景记录一些数据 ... -
有关于时间
2012-12-01 15:55 948int型如果表示ms的话,那也就是24天而已。 double ... -
我对移位操作的误解
2012-11-30 20:52 955一直以为java的移位操作只能操作int,原来是自己的误解。l ... -
Java Concurrency in Practice读书笔记
2011-08-13 10:03 2927目录 Chapter 1. Introduction 2 1. ... -
bug fix 记录
2011-01-07 21:58 1208p1 Caused by: org.xml.sax.SAXP ... -
实践中的重构10_平铺直叙的代码(new)
2011-01-06 00:09 719很多应用程序的主要目的就是用计算机来代替人处理真实世界 ... -
实践中的重构01-05
2010-11-13 01:06 1179目录 实践中的重构01_ ...
相关推荐
1. **bin** 目录:包含HBase的可执行脚本,如`start-hbase.sh`用于启动HBase,`stop-hbase.sh`用于停止服务,以及`hbase`命令行工具。 2. **conf** 目录:这是存放HBase配置文件的地方。你需要在这里配置`hbase-...
HBase是Apache软件基金会的一个开源项目,是一款基于Google Bigtable理念设计的分布式列式数据库,专为处理海量数据而设计。HBase属于Apache Hadoop生态系统的一部分,与HDFS(Hadoop Distributed File System)紧密...
在这个绝版的"Hbase-0.94.18"版本中,我们可以深入了解早期HBase的设计思想和功能特性。 1. **分布式存储**: HBase是一种分布式、多版本、列导向的NoSQL数据库。它将数据存储在表中,由行键、列族、列和时间戳组成...
HBase api
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 在 Ambari 2.7.x 下的编译与使用详解》 HBase,全称Apache HBase,是一款构建在Hadoop文件系统之上的分布式、版本化、列族式存储系统,主要用于处理大规模数据。它提供了高度可靠性和高...
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储...
* hbase.master.logcleaner.plugins:org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner, org.apache.hadoop.hbase.master.cleaner.TimeToLiveProcedureWALCleaner,这个参数指定了预写日志的清理插件。...
HBase实战_Cn.pdf
确保HBase和Hadoop版本兼容是成功部署的关键,因为不兼容的版本可能会导致各种问题,如数据丢失、性能下降或服务不可用。在实际生产环境中,应该根据项目需求选择合适的HBase和Hadoop版本,以保证系统的稳定性和高效...
`hbase.client.retries.number`是客户端重试次数,决定在网络不稳定或服务器繁忙时的容错能力。 7. **刷写与合并策略**:`hbase.hregion.flushsize`设定Region刷写到HDFS的阈值,`hbase.hregion.majorcompaction....
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....
- 在Master节点的 `/usr/hbase/bin` 目录下,使用 `start-hbase.sh` 脚本启动HBase集群,用 `stop-hbase.sh` 脚本停止服务。如果不能正常停止,可能需要手动杀死相关进程。 7. **测试HBase**: - 打开HBase Shell...
HBase的设计理念源于Google的Bigtable,但在开源社区的努力下,已经发展成为了一个独立且功能强大的系统,广泛应用于互联网、电信、金融等多个领域的大数据存储与分析。 源码分析: 1. **模块结构**: `hbase-...
总之,HBase-1.2.1的二进制压缩包提供了在Hadoop环境下部署和运行HBase所需的所有组件,适用于处理大量非结构化或半结构化数据的场景,如实时分析、日志处理、物联网应用等。正确解压并配置后,用户可以充分利用...
创建一个新文件或根据需求修改已存在的配置,例如设置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
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
例如,设置HDFS为默认的Hadoop安装:`<property><name>hbase.rootdir</name><value>hdfs://namenode_host:port/hbase</value></property>`。 启动HBase集群,需要启动Zookeeper和HBase守护进程: ```bash # 启动...
搭建pinpoint需要的hbase初始化脚本hbase-create.hbase