- 浏览: 536436 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
飞天奔月:
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
发表评论
-
hbase分页功能的几种实现方案
2015-01-13 23:52 5458hbase分页功能的几种实现方案。 分页功能是线上系统的常用 ... -
simplehbase v0.98.1开始支持hbase0.98
2014-12-29 21:48 1106https://github.com/zhang-xzhi/s ... -
hbase轻量级中间件simplehbase v1.0简介
2014-12-13 18:55 1401https://github.com/zhang-xzhi/s ... -
hbase put UML图
2014-12-11 23:40 1303create Htable put hbase rpc ... -
hbase开发问题-PooledHTable多次close导致问题
2014-12-11 23:27 2069PooledHTable多次close导致问题 Pooled ... -
hbase的CoprocessorProtocol及一个简单的通用扩展实现V2
2014-12-04 18:00 2110hbase中的CoprocessorProtocol机制. ... -
simplehbase对JOPO新增xml配置和无配置方式
2014-10-24 22:50 995simplehbase介绍文章如下: https://gith ... -
hbase轻量级中间件simplehbase v0.9简介
2014-07-14 13:57 643https://github.com/zhang-xzhi/s ... -
hbase轻量级中间件simplehbase v0.8简介
2014-04-28 21:44 3774https://github.com/zhang-xzhi/s ... -
hbase开发问题-hbase版本号报错
2014-04-22 19:19 2775由于使用了自定义的classloader,导致报错。 p ... -
HBase Client使用注意点
2014-04-21 12:51 2556HBase Client使用注意点: 1 HTable线程 ... -
hbase开发问题-hbase-0.94.0的ServerCallable callTimeout处理有问题
2014-04-14 22:07 2250读hbase-0.94.0的ServerCallable时,发 ... -
Phoenix和simplehbase功能简单比较
2014-04-02 17:20 1636Phoenix和simplehbase功能简单比较 大数据应 ... -
hbase web console simplehbaseviewer
2014-03-12 19:11 1252https://github.com/zhang-xzhi/s ... -
hbase轻量级中间件simplehbase v0.2简介
2013-12-19 23:51 1698https://github.com/zhang-xzhi/s ... -
hbase轻量级中间件simplehbase v0.1简介
2013-10-09 19:29 1559simplehbase尝试简化基于hbase的java应用开发 ... -
hbase的CoprocessorProtocol及一个简单的通用扩展实现V1
2013-08-18 14:15 5307hbase的CoprocessorProtocol及一个简单的 ... -
hbase的基本操作
2013-08-18 14:02 4486本文列举一些hbase的基本操作代码。 package ... -
hadoop_hadoop的一次读取
2013-04-29 13:09 1892一次hadoop的read getFileSystem 代码 ... -
hadoop_hadoop的map reduce
2011-11-09 21:21 1258这个根据功能模块分为 ...
相关推荐
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....
- 在Master节点的 `/usr/hbase/bin` 目录下,使用 `start-hbase.sh` 脚本启动HBase集群,用 `stop-hbase.sh` 脚本停止服务。如果不能正常停止,可能需要手动杀死相关进程。 7. **测试HBase**: - 打开HBase Shell...
总之,HBase-1.2.1的二进制压缩包提供了在Hadoop环境下部署和运行HBase所需的所有组件,适用于处理大量非结构化或半结构化数据的场景,如实时分析、日志处理、物联网应用等。正确解压并配置后,用户可以充分利用...
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的主节点(`hbase.master`)和Zookeeper地址(`hbase.zookeeper.quorum`): ```xml <name>hbase.rootdir <value>hdfs://namenode_host:port/hbase ...
HBase2集群配置.pdf HBase2集群配置.pdf HBase2集群配置.pdf HBase2集群配置.pdf
例如,设置HDFS为默认的Hadoop安装:`<property><name>hbase.rootdir</name><value>hdfs://namenode_host:port/hbase</value></property>`。 启动HBase集群,需要启动Zookeeper和HBase守护进程: ```bash # 启动...
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 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 ...
HBase 0.94版本是在2012年发布的,虽然现在已经有了更新的版本,但了解其在特定环境如Cygwin中的运行问题仍然有价值,因为这可以帮助我们理解在不同平台上的兼容性和调试技巧。 Cygwin是一个在Windows操作系统上...