转自:http://flyingdutchman.iteye.com/blog/1871025

在当前的基于Hadoop系统的数据仓库中,数据存储格式是影响数据仓库性能的一个重要因素。Facebook于是提出了集行存储和列存储的优点于一身的RCFile文件存储格式,据说当前在Facebook公司内部,其数据仓库的文件存储格式都是RCFile,另外盛大内部的数据仓库使用的也是RCFile文件存储格式。

我们现在正在进入一个大数据时代,何为“大数据”?它不仅仅就是指海量的数据,也包括如何高效的存储、管理和使用这写数据。在Hadoop运行环境中,数据的存储格式要满足以下几个特点: 

        1)、数据加载数据要快; 

        2)、数据查询处理要快; 

        3)、高效的数据存储空间利用率; 

        4)、适应高强度的动态负载模式。 

        在之前的Hadoop ecosystem中,我们已经知道了基于行存储结构的TextFile和SequenceFile的文件格式,也学习过Hbase的面向列存储的文件格式,对于Hive数据仓库来说,他们都有各自的有点个缺点,今天我们来学习一个新的文件存储格式——RCFile。 

        首先,我们先来探讨一下基于行的存储和面向列的存储的优缺点: 

        基于行存储的数据结构:优点是具备快速数据加载和动态负载的高适应能力,因为行存储保证了相同记录的所有域都在同一个集群节点;但是它不太满足快速的查询响应时间的要求,特别是在当查询仅仅针对所有列中的少数几列时,它就不能直接定位到所需列而跳过不需要的列,由于混合着不同数据值的列,行存储不易获得一个极高的压缩比,行存储不易获得一个较高的压缩比。 



                                                          Hadoop block中的基于行存储的示例图 

        面向列存储的数据结构:我们先看一下Hadoop
block中面向列存储的示例: 



                                                          Hadoop block中的面向列存储的示例图 

        在面向列的文件存储结构中,列A和列B存储在同一列组,而列C和列D分别存储在单独的列组。这种结构使得在查询时能够直接读取需要的列而避免不必要列的读取,并且对于相似数据也可以有一个更好的压缩比。但是他的缺点也想但明显,那就是由于元组重构的较高开销,它并不能提供基于Hadoop系统的快速查询处理,也不能保证不能保证同一记录的所有列都存储在同一集群节点之上,也适应高度动态的数据负载模式。 



        RCFile: 

        结合列存储和行存储的优缺点,Facebook于是提出了基于行列混合存储的RCFile,它是基于SEQUENCEFILE实现的列存储格式,它即满足快速数据加载和动态负载高适应的需求外,也解决了SEQUENCEFILE的一些瓶颈。该存储结构遵循的是“先水平划分,再垂直划分”的设计理念。先将数据按行水平划分为行组,这样一行的数据就可以保证存储在同一个集群节点;然后在对行进行垂直划分。 

        我们再来看一下HDFS块内RCFile方式存储的示例图: 



                                                             Hadoop block中的RCFile存储的示例图 

        RCFile是在Hadoop HDFS之上的存储结构,该结构强调: 

        1)、RCFile存储的表是水平划分的,分为多个行组,每个行组再被垂直划分,以便每列单独存储; 

        2)、RCFile在每个行组中利用一个列维度的数据压缩,并提供一种Lazy解压(decompression)技术来在查询执行时避免不必要的列解压; 

        3)、RCFile支持弹性的行组大小,行组大小需要权衡数据压缩性能和查询性能两方面。 

        每个HDFS block块中,RCFile以行组为基本单位来组织记录。也就是说,存储在一个HDFS块中的所有记录被划分为多个行组;对于一张表所有行组大小都相同,一个HDFS块会有一个或多个行组。 

        一个行组包括三个部分: 

        1)、第一部分是行组头部的同步标识,主要用于分隔HDFS块中的两个连续行组; 

        2)、第二部分是行组的元数据头部,用于存储行组单元的信息,包括行组中的记录数、每个列的字节数、列中每个域的字节数; 

        3)、第三部分是表格数据段,即实际的列存储数据。在该部分中,同一列的所有域顺序存储。从上图可以看出,首先存储了列A的所有域,然后存储列B的所有域等。 

        RCFile的每个行组中,元数据头部和表格数据段(每个列被独立压缩)分别进行压缩,RCFile使用重量级的Gzip压缩算法,是为了获得较好的压缩比。另外在由于Lazy压缩策略,当处理一个行组时,RCFile只需要解压使用到的列,因此相对较高的Gzip解压开销可以减少。 

        RCFile具备相当于行存储的数据加载速度和负载适应能力,在读数据时可以在扫描表格时避免不必要的列读取,它比其他结构拥有更好的性能,使用列维度的压缩能够有效提升存储空间利用率。

rcfile的更多相关文章

  1. 基于 Hive 的文件格式:RCFile 简介及其应用

    转载自:https://my.oschina.net/leejun2005/blog/280896 Hadoop 作为MR 的开源实现,一直以动态运行解析文件格式并获得比MPP数据库快上几倍的装载速度 ...

  2. hive中rcfile格式(收藏文)

    首先声明,此文是属于纯粹收藏文,感觉讲的很不错. 本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮 ...

  3. Hadoop RCFile存储格式详解(源码分析、代码示例)

    RCFile   RCFile全称Record Columnar File,列式记录文件,是一种类似于SequenceFile的键值对(Key/Value Pairs)数据文件.   关键词:Reco ...

  4. Spark RCFile的那些“坑”

    RCFile在平台的应用场景中多数用于存储需要“长期留存”的数据文件,在我们的实践过程中,RCFile的数据压缩比通常可以达到8 : 1或者10 : 1,特别适用于存储用户通过Hive(MapRedu ...

  5. Hive 创建和生成Rcfile 和SequenceFile格式的表

    rcfile格式表需要从原始的textfile 文件格式表导出数据并导入到新建好的rcfile格式表里 转: HIVE RCFile高效存储结构 创建rcfile 格式的表: CREATE TABLE ...

  6. 大数据小视角1:从行存储到RCFile

    前段时间一直在忙碌写毕设与项目的事情,很久没有写一些学习心得与工作记录了,开了一个新的坑,希望能继续坚持写作与记录分布式存储相关的知识.为什么叫小视角呢?因为属于随想型的内容,可能一个由小的视角来审视 ...

  7. hive中使用rcfile

    (1)建student & student1 表:(hive 托管)create table student(id INT, age INT, name STRING)partitioned ...

  8. HDFS 文件格式——SequenceFile RCFile

     HDFS块内行存储的例子  HDFS块内列存储的例子  HDFS块内RCFile方式存储的例子

  9. 转载:基于 Hive 的文件格式:RCFile 简介及其应用---推酷

    Hadoop 作为MR 的开源实现,一直以动态运行解析文件格式并获得比MPP数据库快上几倍的装载速度为优势.不过,MPP数据库社区也一直批评Hadoop由于文件格式并非为特定目的而建,因此序列化和反序 ...

随机推荐

  1. Linux主机被SSH精神病(Psychos)暴力攻破后成为肉鸡的攻防过程

    近日公司局域网突然变得非常慢,上网受到很大影响,不仅仅是访问互联网慢,就连访问公司内部服务器都感到异常缓慢.于是对本局域网网关进行测试:   $ ping 10.10.26.254   发现延时很大, ...

  2. AC日记——小书童——刷题大军 洛谷 P1926

    题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文言是火,点亮历史宫灯:历史是灯,照亮社会之路:社会是路,通向哲学大坑:哲学是坑,埋葬文科生 ...

  3. 在Ubuntu 10.10下安装JDK配置Eclipse及Tomcat

    1.安装JDK 1.1.到官网下载相关的JDK 这里下载的是 jdk-6u23-linux-i586.bin. 下载地址:http://www.oracle.com/technetwork/java/ ...

  4. [Javascript] Cancel A Promise Using AbortController

    The AbortController interface enables us to cancel a one or more DOM requests. In this lesson, we wi ...

  5. AWS向中国有限预览客户推出多级别AWS支持服务

     2014年9月26日 在AWS中国(北京)区域有限预览服务开展的过程中.很多客户都提出了对AWS支持服务(AWS Support)的需求. AWS客户在向云端部署系统,日常运营维护以及关键性项目实 ...

  6. 关于Activity启动模式(launchMode)和intent设置测试后 发现和网上说的不符 是不是我错了 求解

    看了很多关于Activity启动模式(launchMode)和intent设置intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);发现网上说的和我测试结果 ...

  7. 编资源bundle时图片文件变成tiff的解决方法

    一般,编写SDK的时候,如果SDK还带了一些资源文件,那么最理想的是将资源文件也打包成为bundle给应用方一起使用.而在编资源bundle时,有时会发现编译好后的图片文件从png转成了tiff,这样 ...

  8. c#中的多态 c#中的委托

    C#中的多态性          相信大家都对面向对象的三个特征封装.继承.多态很熟悉,每个人都能说上一两句,但是大多数都仅仅是知道这些是什么,不知道CLR内部是如何实现的,所以本篇文章主要说说多态性 ...

  9. nginx-伤心的事

    今天测试接口,总是出问题,测试了两天,整个流程就卡在最后一步. 每次采用curl,request等请求访问我的服务器都会返回403状态码,网上找了很多资料 有权限的,有静态文件的,然而很多都没有什么卵 ...

  10. Nova虚拟机迁移

    这里根据我的配置环境只讲述冷迁移(Migrate Instance)需要进行的计算节点配置而不包含热迁移(Live Migrate Instance),后者需要共享存储及Hypervisor的支持. ...