通用数据存储格式: Hadoop SequenceFile、HFile

简介:

Hadoop SequenceFile

详见:http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html

3个概念:记录(Record)、块(Block)、文件(File)。

记录(Record): Hadoop SequenceFile的存储格式是通用的KV数据存储格式,key和value都是变长二进制数据。Record Len 表示的是key 和value 的占用的byte之和,Record压缩方式中 key 是不压缩。同步点Sync 作用数据恢复和扫描。当指定读取的位置不是记录首部的时候,通过读取一个同步点的记录,不至于读取数据的reader “迷失”。 (hadoop实现:每2000byte 就插入一个同步点,这个同步点占16 byte ,包括同步点标示符:4byte ,一个同步点的开销是20byte 。)对二进制数据,任何字符都可出现,故采用单字节的Sync标识难于区分数据和同步点,需要采用多字节的Sync(什么样的多个字节常被用来所Sync标识?0xFFFFFFFFFFFFFFFF?)。

块(Block):存储Block header和多个record数据。Hadoop SequenceFile可认为没有块概念,只有Block-Compressed SequenceFile才会将多个record压缩后一起存储,详见hadoop文档。

文件(File): 文件头+数据。存储如下信息:文件标识SEQ,key和value的格式说明,压缩相关信息,metadata(二级索引,The sequence file also can contain a “secondary” key-value list that can be used as file Metadata. This key-value list can be just a Text/Text pair, and is written to the file during the initialization that happens in the SequenceFile.Writer constructor, so you can’t edit your metadata.),Sync。常规的文件头需要的数据:文件标识、Sync标识、数据格式说明(含压缩)、文件元数据(时间、owner、权限等)、检验信息等。

HBase

Hbase MapFile

Hbase最初直接使用Hadoop的MapFile实现有序的Key存储(将数据和索引分别存成Hadoop SequenceFile)。用MapFile实现有序Key存储需要解决2个问题:1)如何删除数据?2)如何保证数据有序?解决方案:1)使用删除标志Type;2)内存中排序,达到阈值后写成MapFile(MemStore实现)。

MemStore 的方案意味这存在多个MapFile,这样对于读数据意味着可能需要扫描多个文件。为了减少需要读取的文件数,Hbase的设计者引入compaction:1) 将多个小文件合并成大文件;2)将所有的文件合并成一个大文件。

HFile V1

引入版本:HBase 0.20。核心特性:1)将index和数据合成一个文件(为减少index量,可只对每个块的首个key做索引);2)增加metadata特性。

The Meta block is designed to keep a large amount of data with its key as a String, while FileInfo is a simple Map preferred for small information with keys and values that are both byte-array. Regionserver’s StoreFile uses Meta-Blocks to store a Bloom Filter, and FileInfo for Max SequenceId, Major compaction key and Timerange info. This information is useful to avoid reading the file if there’s no chance that the key is present (Bloom Filter), if the file is too old (Max SequenceId) or if the file is too new (Timerange) to contain what we’re looking for.

HFile V2

引入版本:HBase 0.92。核心特性:1)引入多级索引;2)引入基于块的索引和Bloom Filter(解决问题:无需载入所有索引和Bloom Filter数据)。

从图上可知,HFileV2有3种索引:Root Index记录每个块首个key极其索引;Leaf Index记录块内每个record的索引;intermediate index记录每个块最后的key极其索引。(Since the index is moved to block level you then have a multi-level index, meaning each block has its own index (leaf-index).  The last key of each block is kept to create the intermediate/index that makes the multilevel-index b+tree like.)

前向扫描和后向扫描:The block header now contains some information: The “Block Magic” field was replaced by the “Block Type” field that describes the content of the block “Data”, Leaf-Index, Bloom, Metadata, Root-Index, etc. Also three fields (compressed/uncompressed size and offset prev block) were added to allow fast backward and forward seeks.

前缀压缩和差异压缩(Prefix and Diff Encoding):HBase的数据是有序的,因此Key差异不大,为了提高压缩比,引入2种针对性的压缩算法。

HFile V3

为了进一步提高压缩率:1)将块内的key和value分开存储, key存在块前面,value存在块后面。2)Compress timestamps。

相关文章

Hadoop I/O: Sequence, Map, Set, Array, BloomMap Files

HBase I/O – HFile

附录 oceanbase(类似HFile)

记录:oceanbase的记录value是有结构的二进制数据。格式为:keyLen(2B)+keyData+valueData。 其中valueData由一个或多个common::ObObj对象串化而成。详见:oceanbase\src\sstable\ob_sstable_row.h

块(Block)格式:block header + serialized rows + row index。详见:oceanbase\src\sstable\ob_sstable_block_builder.h

文件格式:详见:oceanbase\src\sstable\ob_sstable_writer.h

Leveldb 实现原理:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html
leveldb源代码分析: http://blog.nosqlfan.com/tags/leveldb


本文转自 zhenjing 博客园博客,原文链接:http://www.cnblogs.com/zhenjing/archive/2012/11/02/File-Format.html    ,如需转载请自行联系原作者

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9月前
|
存储 分布式计算 负载均衡
Hadoop生态系统中的数据存储技术:HDFS的原理与应用
Hadoop生态系统中的数据存储技术:HDFS的原理与应用
|
存储 分布式计算 Hadoop
Hadoop支持的文件格式之SequenceFile(下)
Hadoop支持的文件格式之SequenceFile(下)
110 0
Hadoop支持的文件格式之SequenceFile(下)
|
分布式计算 Hadoop
Hadoop支持的文件格式之SequenceFile(上)
Hadoop支持的文件格式之SequenceFile(上)
146 0
|
SQL 存储 数据库
Hive简介、什么是Hive、为什么使用Hive、Hive的特点、Hive架构图、Hive基本组成、Hive与Hadoop的关系、Hive与传统数据库对比、Hive数据存储(来自学习资料)
1.1 Hive简介 1.1.1   什么是Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 1.1.2   为什么使用Hive Ø  直接使用hadoop所面临的问题 人员学习成本太高 项目周期要求太短 MapReduce实现复杂查询逻辑开发难度太大   Ø  为什么要使用Hive 操作接口采用类SQ
26070 0
|
存储 分布式计算 Linux
基于Hadoop生态系统的一种高性能数据存储格式CarbonData(性能篇)
CarbonData在数据查询的性能表现比Parquet好很多,在写一次读多次的场景下非常适合使用;社区比较活跃,响应也很及时。目前官网发布版本1.3.0与最新的spark稳定版Spark2.2.1集成,增加了支持标准的Hive分区,支持流数据准实时入库等新特性,相信会有越来越多的项目会使用到。
3929 0
|
分布式计算 Hadoop 存储
Hadoop SequenceFile数据结构介绍及读写
  在一些应用中,我们需要一种特殊的数据结构来存储数据,并进行读取,这里就分析下为什么用SequenceFile格式文件。 Hadoop SequenceFile   Hadoop提供的SequenceFile文件格式提供一对key,value形式的不可变的数据结构。
1343 0
|
14天前
|
存储 分布式计算 Hadoop
大数据处理架构Hadoop
【4月更文挑战第10天】Hadoop是开源的分布式计算框架,核心包括MapReduce和HDFS,用于海量数据的存储和计算。具备高可靠性、高扩展性、高效率和低成本优势,但存在低延迟访问、小文件存储和多用户写入等问题。运行模式有单机、伪分布式和分布式。NameNode管理文件系统,DataNode存储数据并处理请求。Hadoop为大数据处理提供高效可靠的解决方案。
37 2
|
14天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
16天前
|
SQL 分布式计算 Hadoop
利用Hive与Hadoop构建大数据仓库:从零到一
【4月更文挑战第7天】本文介绍了如何使用Apache Hive与Hadoop构建大数据仓库。Hadoop的HDFS和YARN提供分布式存储和资源管理,而Hive作为基于Hadoop的数据仓库系统,通过HiveQL简化大数据查询。构建过程包括设置Hadoop集群、安装配置Hive、数据导入与管理、查询分析以及ETL与调度。大数据仓库的应用场景包括海量数据存储、离线分析、数据服务化和数据湖构建,为企业决策和创新提供支持。
57 1

相关实验场景

更多