`
uestzengting
  • 浏览: 96421 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HBase bulkload的一个bug定位

阅读更多
在HBase bulkload过程中,如果rowkey和version都一致,无法取得最新导入的数据。

问题定位:
在HBase里,如果两个HFile中都有相同rowkey和version的数据,是靠HFile的fileinfo里的MAX_SEQ_ID_KEY来判断哪个文件是最新,MAX_SEQ_ID_KEY
越大的文件越新。

1.通过flush写的HFile文件有往fileinfo里面加MAX_SEQ_ID_KEY
public void appendMetadata(final long maxSequenceId, final boolean majorCompaction)
throws IOException {
    writer.appendFileInfo(MAX_SEQ_ID_KEY, Bytes.toBytes(maxSequenceId));    
writer.appendFileInfo(MAJOR_COMPACTION_KEY, Bytes.toBytes(majorCompaction));
    appendTimeRangeMetadata();
}

2.而通过bulkload的HFileOutputFormat方式写的HFile没有往fileinfo里面加MAX_SEQ_ID_KEY

private void close(final HFile.Writer w) throws IOException {
    if (w != null) {
        w.appendFileInfo(StoreFile.BULKLOAD_TIME_KEY, Bytes.toBytes(System .currentTimeMillis()));
        w.appendFileInfo(StoreFile.BULKLOAD_TASK_KEY, Bytes.toBytes(context .getTaskAttemptID().toString()));
        w.appendFileInfo(StoreFile.MAJOR_COMPACTION_KEY, Bytes.toBytes(true)); w.close();
    }
}

3.所以导致bulkload后最新的数据取不到,得在HFileOutputFormat加上MAX_SEQ_ID_KEY才行
0
1
分享到:
评论
8 楼 uestzengting 2013-07-17  
朝阳之辉 写道
你的想法是保证rowkey唯一是吧,我的想法是rowkey是可以任意重复的,这样可以充分发挥hbase的多版本优势,而在bulkload的过程中保证version(时间戳)绝对唯一,这样才不会丢数据,经过我测试,在很少数据量下的bulkload就有可能时间戳重复,如果恰巧rowkey也相同的话,就会丢失数据


hbase的多版本我没觉得是个优势,我觉得是个糟粕,哈哈。它导致存储模型变复杂了,并同时产生过不少bug,不使用也许更好些。
7 楼 朝阳之辉 2013-07-16  
你的想法是保证rowkey唯一是吧,我的想法是rowkey是可以任意重复的,这样可以充分发挥hbase的多版本优势,而在bulkload的过程中保证version(时间戳)绝对唯一,这样才不会丢数据,经过我测试,在很少数据量下的bulkload就有可能时间戳重复,如果恰巧rowkey也相同的话,就会丢失数据
6 楼 uestzengting 2013-07-11  
朝阳之辉 写道
你的version是用的时间戳吧,在数据量非常大的情况下,怎样保证version的绝对唯一呢,如果不是时间戳,就会影响hbase对数据失效的判断吧

是时间戳,我们的数据没有到达rowkey + 时间戳也会重的地步,并且入hbase了以后也不会删除。

如果说在rowkey下用时间戳作为version会导致数据重复,可以将数据存为原rowkey + version + 自增数N位 作为新的rowkey,而version存为时间戳,也就不影响失效判断了。
5 楼 朝阳之辉 2013-07-10  
你的version是用的时间戳吧,在数据量非常大的情况下,怎样保证version的绝对唯一呢,如果不是时间戳,就会影响hbase对数据失效的判断吧
4 楼 hahaiwl 2013-04-11  
uestzengting 写道
这是0.90版的bug,不知道最新的版本有没有修复,我们的办法是在bulkload的时候version增大了点,让它version不一样绕过去了。

谢谢。管用。惊醒梦中人
3 楼 uestzengting 2013-04-10  
这是0.90版的bug,不知道最新的版本有没有修复,我们的办法是在bulkload的时候version增大了点,让它version不一样绕过去了。
2 楼 hahaiwl 2013-04-10  
我也遇到这样的问题,怎么生成,还有怎么设置啊,楼主再详细点,多谢啦
1 楼 朝阳之辉 2013-04-07  
MAX_SEQ_ID_KEY怎么生成?

相关推荐

    MR程序Bulkload数据到hbase

    描述提到这是一个博客配套文件,包含了一个具体的示例,展示了如何使用MapReduce来实现Bulkload。这意味着文件中可能包括了Java代码,这些代码会执行以下步骤: 1. **数据预处理**:首先,使用MapReduce作业将源...

    BulkLoadHive2Hbase

    BulkLoad 是一种批量写入数据的方式,可以快速地将大量数据写入到 HBase 中。该方法可以减少写入时间,提高数据写入效率。 Hive 到 HBase 的批量写入 Hive 是一种基于 Hadoop 的数据仓库,可以存储和处理大量...

    Parquet-Hbase-bulkload-Put-Buffered-example:通过使用 WAL 和缓冲的 Put 从 Hdfs 文件中摄取 HBase 记录

    很快我将添加如何使用 reducer 以及使用 MR 驱动程序自动刷新所有放置的另一个版本,而无需使用 TAblemapper 类进行缓冲控制。 另一个例子: : 在添加的这个示例中,性能明显提高,将更多的缓冲项从 1 增加到 ...

    java解决hive快速导数据到Hbase代码

    在项目`hive-bulkload-hbase-master`中,你将找到一个示例项目,它演示了上述步骤的实现。这个项目可能包括了Hive和HBase的连接代码、数据预处理逻辑、MapReduce作业的配置以及加载HFiles的Java代码。通过阅读和理解...

    How-to: Use HBase Bulk Loading, and Why

    为了解决这个问题,HBase提供了批量加载(Bulk Loading)机制,它允许我们将数据预先转换成HFile格式,然后一次性地快速加载到表中,极大地提高了数据导入速度。 批量加载的基本流程如下: 1. **生成SequenceFile*...

    hbase-0.94脚本hbase在cygwin的环境的bug

    HBase是Apache Hadoop生态系统中的一个分布式、可扩展的大数据存储系统。它设计用于处理海量结构化数据,尤其是在大规模集群上。HBase 0.94版本是在2012年发布的,虽然现在已经有了更新的版本,但了解其在特定环境如...

    HBase配置项说明及调优建议.xlsx

    hbase 常用参数含义,默认值,调优建议(必须参数,split,compaction,blockcache,memstore flush,hlog,zookeeper,其他,等相参数名称、含义、默认值、调优建议)

    Hbase调用JavaAPI实现批量导入操作

    在大数据处理领域,Apache HBase是一个分布式的、版本化的NoSQL数据库,它构建于Hadoop之上,特别适合处理海量结构化数据。这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase...

    hbase-bulkload

    hbase批量加载 从RCFile进行HBase批量加载的临时代码 这将使用LoadIncrementalFiles从HFileOutputFormat2中Mapreduce写入的数据中加载HBase表。

    HbaseTemplate 操作hbase

    这些方法允许我们灵活地定位到HBase表中的特定行或范围,返回结果可以是单个RowResult或一个RowResult集合。 3. **获取(get)操作**:获取操作用于根据行键获取HBase表中的一行数据。HbaseTemplate的`get`方法接受...

    Hive数据导入HBase的方法.docx

    Hive 是一个基于 Hadoop 的数据仓库工具,而 HBase 是一个基于 Hadoop 的 NoSQL 数据库。它们都是大数据处理的重要组件。在数据处理过程中,经常需要将数据从 Hive 导入到 HBase 中。本文将详细介绍 Hive 数据导入 ...

    jobs_hbase_mirrorm5y_BulkLoadjava_

    4. **启用Bulk Load**:在应用开始前,需要调用`HBaseConfiguration`的`setBoolean("hbase.mapreduce.bulkload.max.load", true)`方法开启Bulk Load功能。 5. **使用`LoadIncrementalHFiles`工具**:最后,使用...

    hbase-1.1.5-bin版本的压缩包,下载到本地解压后即可使用 HBase 是一个开源的、分布式的NoSQL数据库

    HBase 是一个开源的、分布式的、版本化的 NoSQL 数据库(也即非关系型数据库),它利用 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)提供分布式数据存储。与传统的关系型数据库类似,HBase 也以...

    阿里HBase的数据管道设施技术.pptx

    然而,在多集群环境下,数据一致性成为一个挑战,因为很难保证所有任务同时完成,这可能导致短时间内数据不一致。为解决这个问题,引入了同步中心,将导入逻辑作为插件集成,实现了任务的调度、异构数据源的适配和...

    hbase-1.2.1-bin.tar的压缩包,下载到本地解压后即可使用 HBase 是一个开源的、分布式的NoSQL 数据库

    HBase 是一个开源的、分布式的、版本化的 NoSQL 数据库(也即非关系型数据库),它利用 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)提供分布式数据存储。与传统的关系型数据库类似,HBase 也以...

    HBase海量数据存储实战视频教程

    手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 ...2. HBase批量装载——Bulk load 3. HBase的协处理器(Coprocessor) 4. HBase事务 5. HBase数据结构

    HBase集群配置SNAPPY压缩

    大数据时代,海量数据的存储和分析是一个巨大的挑战,给hadoop或者hbase集群添加数据压缩的能力,是必不可少的,通过压缩不但能节约磁盘空间,而且也能节省集群间网络带宽的损耗,从而间接提高了集群任务的整体执行...

    hbase用于查询客户端工具

    1. **HBase Shell**:这是HBase自带的一个命令行接口,用户可以通过Java REPL(Read-Eval-Print Loop)与HBase交互。HBase Shell提供了创建表、删除表、插入数据、查询数据等基本操作,同时也支持复杂的条件查询和...

    Hbase 删除某一列

    删除Hbase中某个表的一列值 命令 java -jar deleteOneColumn.jar(这个文件的路径) '表名' '列簇名' '列名'

    hbase权威教程

    3. HBase操作:掌握创建、删除、查询和更新表的方法,以及数据导入导出工具HBase Bulk Load的使用。 4. API与Shell命令:学习Java API和HBase Shell,进行基本的数据操作。 5. 性能优化:探讨HBase的性能瓶颈,学习...

Global site tag (gtag.js) - Google Analytics