`
flyingdutchman
  • 浏览: 359130 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

深入学习《Programing Hive》:RCFile

    博客分类:
  • Hive
阅读更多
        在当前的基于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具备相当于行存储的数据加载速度和负载适应能力,在读数据时可以在扫描表格时避免不必要的列读取,它比其他结构拥有更好的性能,使用列维度的压缩能够有效提升存储空间利用率。
  • 大小: 110.9 KB
  • 大小: 91.6 KB
  • 大小: 94.1 KB
分享到:
评论

相关推荐

    HIVE编程指南

    HIVE编程指南中文版,是由programing hive翻译过来

    Programing1:编程的最终评估1

    下面我们将深入探讨这个评估可能涉及的一些关键知识点。 首先,基础编程语言的语法是必不可少的。无论是Python、Java、C++还是其他语言,掌握变量定义、数据类型(如整型、浮点型、字符串、布尔型等)、控制流程...

    leetcode手册JAVA-test-programing-:测试-编程-

    只要它可以帮助正在学习新算法的人,它是否从某个地方复制并不重要。 图形示例也将非常有帮助。 不要忘记包括测试。 不要删除以前的算法实现。 只需使用您自己的实现添加一个新文件。 美化和清理您的代码以便于阅读...

    hive-programing

    直线-u'jdbc:hive2:// headnodehost:10001 /; transportMode = http'-f demo.hql #this用于将txt文件存储在azure中 直线-u'jdbc:hive2:// headnodehost:10001 /; transportMode = ...

    Hive编程中文版

    Hive编程指南中文版翻译,Hive programing

    Programing with MFC Programing with MFC

    《Programming with MFC》是关于Microsoft Foundation Classes (MFC) 的编程指南,MFC 是微软为Windows应用程序开发提供的...通过深入学习MFC,开发者可以更好地理解和控制Windows应用程序的生命周期,提高开发效率。

    c++ programing and c

    c++ programingc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ ...

    programing-GIS:代码和笔记本

    通过深入研究这个"programing-GIS:代码和笔记本",学习者不仅可以掌握GIS编程的基本技能,还能了解如何将这些技能应用于实际问题,比如城市规划、环境保护、交通分析等领域。这将是一个宝贵的学习资源,帮助开发者将...

    Python-programing:Python代码

    以上只是Python编程中的一些基础知识点,Python的生态庞大,还有更多高级特性和框架,如网络编程、并发处理、网络爬虫、机器学习、深度学习等,都需要进一步深入学习。Python-programing-main这个压缩包可能包含了...

    web-programing:belajar tentang membuat网站sederhana

    在本课程"web-programing: belajar tentang membuat网站sederhana"中,我们将探索构建简单网站的基本步骤,主要关注CSS这一关键技术。首先,我们需要理解网站的构成元素,包括HTML、CSS以及JavaScript,它们共同构成...

    牛客的代码leetcode代码区别-common_programing:common_programing

    本项目“牛客的代码leetcode代码区别-common_programing”似乎是为了对比和整理在牛客网上与LeetCode上的编程题目解法。通过对这些代码的分析,我们可以深入理解不同平台上的解题策略、代码风格以及可能存在的差异。...

    visualization-programing:这是个人毕业设计

    在"visualization-programing:这是个人毕业设计"项目中,我们可以推测这是一个使用TypeScript语言实现的可视化编程工具或平台。 TypeScript是JavaScript的一个超集,由微软开发,旨在提供静态类型检查、类和模块等...

    Competitive-Programing:来自各种在线平台的问题解决方案

    竞争性编程问题入门JavaScript 要运行js文件,请取消注释必需的软件包。安装依赖项npm install node filename.js Python python filename.py 不Leetcode 等级朗格公司再来1个简单的JavaScript 2个简单的JavaScript 3...

    competive_programing:精进の记录

    “competive_programing-master”作为压缩包子文件的名称,暗示这是一个Git仓库的主分支,通常包含项目的源代码、文档、测试用例等。用户可能可以从中找到关于如何使用Python解决各种算法问题的示例代码,也可能包含...

    Algorithm-competitive-programing.zip

    "Algorithm-competitive-programming.zip"这个压缩包文件,显然是为了帮助学习者深入理解和掌握算法以及如何在竞争编程中运用它们。让我们一起探讨其中蕴含的知识点。 1. **算法基础**:算法是一系列精确的步骤,...

    The C Programing language

    根据提供的文件信息,实际内容与要求的C编程语言知识点不符,该文件内容为一份小品剧本,因此将基于剧本中的元素进行无关内容的剔除,接下来将围绕...掌握这些基础概念对于学习更高级的语言和技术也是非常有帮助的。

    Web-Programing:学习基本的网络编程

    在这个主题中,我们将深入探讨网络编程的基本概念,尤其是与HTML相关的知识,因为这是构建网页内容的关键技术。 网络编程的核心是HTTP(超文本传输协议),它是互联网上应用最广泛的数据通信协议。HTTP允许客户端...

Global site tag (gtag.js) - Google Analytics