`
qindongliang1922
  • 浏览: 2189122 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117680
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126079
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60034
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71405
社区版块
存档分类
最新评论

关于Hbase多版本存储的一个注意点

阅读更多

我们知道hbase是一个多版本的管理系统,在0.96的版本之前默认每个列是3个version,在hbase 0.96之后每个列是1个version,所谓的version其实就是同一条数据插入不同的时间戳来实现的,在hbase底层的存储是基于时间戳排序的,所以每次我们查到的数据都是最新的版本,除非我们指定了要读取特定的时间范围的数据。



先看下Hbase里面Put和Delete命令的api:

Put:
````
Put(byte[] row)
Put(byte[] row, long ts)
Put(byte[] rowArray, int rowOffset, int rowLength)
Put(byte[] rowArray, int rowOffset, int rowLength, long ts)
Put(ByteBuffer row) 
Put(ByteBuffer row, long ts) 
Put(Put putToCopy)

````


Delete:
````
Delete(byte[] row)
Delete(byte[] row, long timestamp)
Delete(byte[] rowArray, int rowOffset, int rowLength)
Delete(byte[] rowArray, int rowOffset, int rowLength, long ts)
Delete(Delete d) 
````



如上,常用的pu和delete方法基本都是第一个,默认我们使用Put命令插入一条数据后,它的时间戳取的是当前时间戳,当然我们也可以自己设置时间戳,但是我建议不要随便设置这个时间戳,设置的不对有可能引起一些莫名奇妙的问题,刚才说过hbase在读取的时候是按时间降序排序的,每次读取到的都是最新的,那么假如在put的时候设置这个时间戳为Long.MAX_VALUE,那么后面你在插入,删除或者更新的时候没有传入时间戳,那么你就会惊奇的发现插入,删除,更新全部失效,为什么? 因为你该次操作的时间戳小于Long.MAX_VALUE,而且你的version只有一个,所以hbase认为一个旧的版本是不能覆盖新的版本的,同样删除也是,你会发现无论你执行多少次删除命令,该条数据就是不能够被删除掉。



注意,在上面的api中Put和Delete的第二个方法都是带时间戳的,大家不要误解,这个时间戳不是rowkey的,它这个时间戳是给下面的column用的,也就是说如果插入一行数据,这行数据中有多个列簇,每个列簇下面都有多个列的话,而且他们的时间戳都一样,那么我就可以直接在put的第二个参数指定,而不需要在每个column上指定,当然如果我们在column上也指定了时间戳,那么默认优先使用column上的时间戳。







总结:

hbase的多版本存储特性是一个强大的功能,在使用的时候应该注意尽量不要修改默认取当前时间戳的逻辑,如果修改了那么在其他添加,删除,更新的时候都应该考虑当前的时间戳是否大于第一次插入时的时间戳,如果不是,那么本次修改就不会生效,所以某一天当你删除一行hbase数据时,发现它并没有被删除掉,不要惊讶,在代码没有问题的情况下,最大的可能就是当前时间戳小于库里数据的时间戳,这一点需要特别注意,最后再重复一遍,尽量不要在向hbase插入数据的时候设置自定义的时间戳,除非业务场景需要。

有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
0
0
分享到:
评论

相关推荐

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】

    随着各个软件的版本不断更新,确保不同组件之间的兼容性成为了一个挑战。本文将介绍Hadoop、HBase、Hive以及ZooKeeper的版本整合兼容性,以及如何根据版本找到兼容性信息。 首先,Hadoop是一个开源的分布式存储和...

    多线程 hbase

    在Java编程环境中,HBase是一个基于Google Bigtable设计的分布式、高性能、版本化的NoSQL数据库。多线程技术是Java程序性能优化的关键手段之一,当处理大数据量时,如HBase这样的系统尤其需要多线程来提升数据读写...

    HBase多表关联查找资料

    * 对于列相对固定的应用,最好采用将一行记录封装到一个 column 中的方式,以节省存储空间。 * 对于需要扩展的应用,column 可以按普通的方式设计,并推荐使用 protocolbuffer 进行封装。 5. 特殊场景下的表结构...

    HBASE使用注意事项

    - **共享机制**:多个HTable实例间共享同一个HConnection。 - **Configuration作用**:相同的Configuration会导致共享同一个HConnection。 - **HConnectionKey**:具体实现可见HConnectionKey源码。 **2. 关闭资源*...

    新手指导hadoop、hbase、hive版本对应关系查找表

    首先,Hadoop是一个开源框架,它允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它主要由HDFS(Hadoop Distributed File System)和MapReduce两部分构成。HBase是建立在Hadoop之上的一个开源...

    HbaseTemplate 操作hbase

    在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...

    hbase不同版本jar包.rar

    作为1.2.x系列的一个小版本更新,1.2.6主要关注了bug修复和安全增强。它修复了之前版本中的一些关键问题,提高了系统整体的可靠性。同时,它可能包含了一些新的特性和功能,比如对Hadoop最新版本的兼容,以及对...

    hadoop、hbase、hive、zookeeper版本对应关系续(最新版)(2015)

    3. 对于Hadoop 2.2版本,推荐使用HBase 0.96及Hive 0.12或更高版本,但需注意可能出现的小问题。 4. ZooKeeper的3.4.x版本是HBase 1.0.0及以上版本运行的前提条件。 此外,因为文章也提到官方对版本兼容性有明确...

    Apache HBase Release 1.0

    总结来说,Apache HBase 1.0版不仅仅是一个版本的发布,它代表了HBase项目里程碑式的成就,为未来的版本奠定了稳定性基础,并确保了与以往版本的兼容性。对于那些使用HBase的用户而言,1.0版的稳定性和高性能保证了...

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】 -

    HBase是一个基于Hadoop的分布式NoSQL数据库,适用于实时读写大数据;而Hive则是建立在Hadoop之上的数据仓库工具,用于数据查询和分析。当这些组件需要协同工作时,版本的兼容性就显得尤为重要。本文将详细介绍Hadoop...

    Hadoop3.1.1集成hbase2.1.1

    Hadoop和HBase都是开源的分布式大数据处理框架,Hadoop主要用于大数据的存储和处理,而HBase是一个构建在Hadoop之上的分布式、可扩展、非关系型的NoSQL数据库。Hadoop和HBase的集成允许HBase使用Hadoop的文件系统...

    hbase-2.2.3-bin.tar.gz

    HBase是Apache软件基金会开发的一个开源、分布式、版本化、基于列族的NoSQL数据库,设计用于处理海量数据。在Hadoop生态系统中,HBase提供了实时读写能力,支持PB级别的数据存储。这次我们讨论的是HBase的2.2.3版本...

    最全面的HBase说明文档

    Apache HBase是一个开源的非关系型分布式数据库(NoSQL),它基于Google的Bigtable论文设计实现,运行在Hadoop之上,适合于存储稀疏数据集。HBase是Apache软件基金会下的一个子项目,其设计目的旨在支持大规模的结构...

    搭建HBase完全分布式数据库

    1. 表(Table):HBase的表由多个行(Row)组成,每行包含一个唯一的行键(Row Key)和多个列族(Column Family)。 2. 行键(Row Key):行的主键,用于唯一标识一行数据。在HBase中,行键是数据排序的依据。 3. ...

    hbase-2.3.5单机一键部署工具

    deploy.sh build single 构建并启动一个hbase单实例 deploy.sh start single 启动hbase实例 deploy.sh stop single 停止hbase实例 deploy.sh check single 检测hbase实例状态 deploy.sh connect single 连接...

    thrift1 查询hbase

    在IT领域,尤其是在大数据处理和分布式系统中,HBase是一个重要的NoSQL数据库,它基于Apache Hadoop并提供了高性能、列式存储、可扩展的实时读写能力。而Thrift是一种跨语言的服务框架,由Facebook开发,它允许不同...

    Hbase集群部署.pdf

    HBase是一个开源、面向列的、可伸缩的分布式存储系统,它基于Google的Bigtable模型构建,用于存储非结构化数据。HBase是Apache的Hadoop项目的一部分,它运行在Hadoop Distributed File System(HDFS)之上,提供了对...

    hbase学习课件

    HBase 是一个分布式、可扩展的大规模数据存储系统,它基于 Google 的 BigTable 模型设计并实现。作为一个非关系型数据库(NoSQL),HBase 提供了高可靠性和高性能的数据存储能力,特别适用于处理海量结构化或半结构...

    hbase基础知识介绍

    值得注意的是,HBase并非一个传统的SQL数据库,它不具备如JOIN操作、查询引擎和数据类型定义等特性。其数据模型更接近于一个分布式的多维稀疏Map,其中键为(rowkey * column-family:qualifier * timestamp),值为...

    hbase-0.96 jar包

    HBase是Apache Hadoop生态系统中的一个分布式、版本化、列族式存储系统,主要用于处理大规模数据。这个“hbase-0.96 jar包”是HBase 0.96版本的二进制发行版,它包含了运行和开发HBase应用所需的所有库文件。HBase ...

Global site tag (gtag.js) - Google Analytics