文档章节

HBase中的delete操作

刀锋
 刀锋
发布于 2017/06/10 15:19
字数 524
阅读 6
收藏 0

参照 http://hadoop-hbase.blogspot.com/2011/12/deletion-in-hbase.html

在HBase当中,当客户发出Delete命令时,实际上数据并没有真正被删除,而是被打上了删除标记,使得这个被删除的数据对外不可见(从逻辑上和MySQL的MVCC也很像,就是通过时间戳来判断数据对读者的可见性,代码见MultiVersionConsistencyControl .java)。用户的Scan和Get操作中,会自动把这些打上删除标记的数据filter掉,这些数据会在compaction操作中被真正删除

HBase的删除标记有三种:

  1. version delete marker 删除指定version的某个qualifier对应的value
  2. column delete marker 删除某个qualifier的所有version的数据
  3. family delete marker 删除column family下所有qualifier对应的所有version的数据 还可以再column和family delete marker上打上时间戳,这时,只有小于这个时间戳的version才会被影响到。

HBase允许进行基于时间的查询从而得到指定时间段的历史数据。查询时间T的数据即查询[0,T+1)的数据。这样就带来了一个潜在的问题。当一个delete marker被set上,所有被它影响到的数据都不再可见。如果你在时间T put了一个qualifier为C的数据,接着在T+X的时间点删除这个qualifier,此时查询[0,T+1)时间段的数据将不会返回qualifier为C的这个KV对。 HBASE-4536 https://issues.apache.org/jira/browse/HBASE-4536解决了这个问题,可以通过在shell里建表时加上 KEEP_DELETED_CELLS=>true或在java client上调用时加上HColumnDescriptor.setKeepDeletedCells(true)。这样,被删除的数据在基于时间的历史数据查询中依然可见(当然要保证delete marker的时间戳不在历史查询的时间范围内)。就刚才的例子来说,加上这个支持后,查询[0,T+1)时间段的数据将会返回C,而查询[0,T+X+1)时间段的数据将不会返回C,因为在该时间点,C也已经被删除了。

本文转载自:http://www.fx114.net/qa-142-102626.aspx

共有 人打赏支持
刀锋
粉丝 3
博文 403
码字总数 305764
作品 0
济南
程序员
私信 提问
HBase shell的基本用法

hbase提供了一个shell的终端给用户交互。使用命令hbaseshell进入命令界面。通过执行 help可以看到命令的帮助信息。 以网上的一个学生成绩表的例子来演示hbase的用法。 name grad course mat...

超人学院
2015/05/27
0
0
HBase 0.94.0 发布,分布式数据库

HBase 0.94.0 发布了,该版本兼容 0.92.0 版本,包含很多性能的提升和 bug 修复以及新特性: 性能方面的提升: [HBASE-5010] - Filter HFiles based on TTL [HBASE-4465] - Lazy-seek optim...

YANGL
2012/05/17
2.3K
2
Hadoop上路_15-HBase0.98.0入门

以下操作在Hadoop分布式集群基础上进行。 一。分布式环境搭建 下载:http://www.apache.org/dyn/closer.cgi/hbase/ ,hbase-0.98.0-hadoop2-bin.tar.gz。 1.在master主控机安装HBase 1)解压...

vigiles
2014/04/03
0
0
Hbase Java API详解

HBase是Hadoop的数据库,能够对大数据提供随机、实时读写访问。他是开源的,分布式的,多版本的,面向列的,存储模型。 在讲解的时候我首先给大家讲解一下HBase的整体结构,如下图: HBase ...

凡16
2013/12/26
0
0
Hbase shell 常用命令

下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', '列名称1','列名称2','列名称N' 添加记录 put '表名称'...

空_明
2013/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS官方钱包keosd

EOS官方钱包的名称是keosd,它负责管理你的私钥,并且帮你进行交易的签名。 不过不幸的是,keosd钱包对普通用户并不友好,它是一个命令行程序,目前还没有像以太坊的mist那样的图形化界面,而...

汇智网教程
今天
7
0
ArrayList的实现原理以及实现线程安全

一、ArrayList概述 ArrayList是基于数组实现的,是一个动态的数字,可以自动扩容。 ArrayList不是线程安全的,效率比较高,只能用于单线程的环境中,在多线程环境中可以使用Collections.syn...

一看就喷亏的小猿
今天
11
0
Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
13
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
16
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部