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

前段时间一直在忙碌写毕设与项目的事情,很久没有写一些学习心得与工作记录了,开了一个新的坑,希望能继续坚持写作与记录分布式存储相关的知识。为什么叫小视角呢?因为属于随想型的内容,可能一个由小的视角来审视海量数据的存储与计算技术,把知识点分为两到三章来梳理。管中窥豹,可见一斑,希望能利用这个过程提高自己,也欢迎阅读的朋友多指正。 第一章先从Facebook的一篇论文《RCFile: A Fast and Space-efficient Data Placement Structure in MapReduce-based Warehouse Systems》展开,来聊一聊存储格式的变迁,来看看如何因地制宜的让海量数据适应计算需求。上车,上车~~

1.数据存储格式

数据的布局结构深刻的影响着数据处理的效率与性能,在底层的存储系统之中如何组织数据。如何对数据进行布局会直接影响数据查询引擎的设计与实现,并且也影响着存储空间的利用效率。好的数据存储与布局能够更好的利用好存储空间,并且契合业务应用场景的查询实践。接下来,我们来看看存储数据的格式是如何随着数据需求的不同进行变迁的。

在传统的数据库系统之中,衍生出了一下几种数据的布局结构:

  • (1)水平行存储结构
  • (2)垂直列存储结构
  • (3)混合PAX存储结构

这几种数据布局方式各有优点与缺陷,我们来一步一步梳理看看:

2.水平的行存储结构

行存储在传统的的数据库之中占据主导地位,例如MySQL的MyISAM的MYD文件,innodb的idb文件,Hive之中的Sequence文件,都是通过行存储来实现的。如下图所示,各个数据记录被组织在一个n元存储模型之中,数据记录是一个接一个地按顺序排列的:

当然,这样的存储布局方式的优点是:因为每行的数据都共同存放,所以单行的数据加载快速,很适合OLTP数据库的增删改查。

而在另一方便,缺点也十分明显,就是不适用于海量数据的存储的OLAP的应用场景:

  • (1)当仅仅对单个列,或少量列进行数据处理时,需要读取额外许多不必要的数据,会产生极大的性能损耗。因为每次都加载了不必要的列,导致缓存被塞满无用的数据,并且随着数据量的增加,这种损耗是成倍增加的。
  • (2)行存储的数据相似性很低,很难实现较高的数据压缩比例,所以相对来说也比较占用存储空间。

所以行存储并不适用于海量数据的分析查询,由行存储便衍生出新的存储模式。

3.垂直的列存储结构

列存储结构可以避免行存储结构的缺点:在实际的数据读取过程中可以避免读取不必要的列。而且由于同一列的数据时共同存储的,可以轻松地实现高的压缩比例来达到节省空间的目的。

天下没有免费的午餐,既然列存储提供了许多优秀的特性,它自然也带来了它自身的缺点,如上图所示:当需要对单行进行查询处理时,列存储不能保证所有字段都存在同一个datanode之上,通常对于一个大表来说也是不可能的事情。在上图之中,同一条记录的四个字段,分别位于不同的三个HDFS块之中,这些块很可能就分布在不同的datanode之上,因此,对于行的读取将会占用集群大量的带宽资源。

更加麻烦的地方在于:当数据删除时,由于不同的数据列分布在不同的数据节点,所以需要同步多个数据节点之上的数据,由此引发的一致性问题是十分棘手的.

所以尽管列存储适用于单机的数据分析查询,但是当海量数据存放在分布式存储系统之上时,列存储似乎也要付出更多的代价。

4.混合PAX存储结构

  • 行存储面对数据记录的访问具有灵活性,但是缓存利用能力差,数据压缩能力差。
  • 列存储显然I/O性能更好,数据压缩能力强,但是对于单行数据的处理在分布式环境之下表现也不近人意。

好吧,你俩都不错,那就结合一下试一试,所以就引申出下文要聊的:混合PAX存储结构

PAX最早是一种改进CPU缓存的混合布局结构,通过对于具有多个不同字段的记录进行优化来提高缓存的性能。PAX利用一个缓存页面来存储属于每个字段的所有字段,并且布局它们的分布。(相当于元数据

同样的,我们也可以利用这种混合布局的思路,来结合行存储与列存储的优点,由Facebook设计的Record Columnar File(RCFile)就借鉴了PAX存储模型,通过先进行水平分区,再垂直分区的方式保证了同一行的数据一定在同一个datanode,同时在单个datanode之上又利用行存储来优化数据的查询与存储性能

如上图所示,在RCFile之中,在每个HDFS的数据块之上,数据Row Group进行排列。每个Row Group包含了三部分:

  • 数据分隔标志
  • 元数据(元数据存储了该Row Group有许多记录,有多少字节。在每个列之中有多少字节
  • 列式存储数据 (实际存储数据的内容,不同的列可以使用不同的压缩算法来最大程度的压缩数据的存储空间

写到这里想必大家都对RCFile有充分的了解了,我们接下来借着RCFile论文的部分再谈两个细节的问题:

  • 懒解压:

    举个栗子:假如说有如下查询 :

    select a from table where a > 1 ;

懒解压意味着列不一定在内存中解压缩,直到执行单元确定列中的数据需要处理才会对数据进行解压。懒解压十分适合条件查询的应用场景,如果有条件不能满足行组中的所有记录,则不需要进行数据解压,这样可以大大减少内存和CPU的占用。

例如,在上述查询中,如果该Row Group之中所有的a都小于或等于1,则没必要对Row Group的内容进行解压,可以直接跳过。当然,这里就需要依赖元数据的内容了。

  • Row Group的size:

    显然,越大的Row Group更有利于数据的压缩处理,但是显然过大的数据存储容量会影响上文提到的懒压缩的性能。妹子的胸也不是越大越好的,所以最终Facebook选择了4MB的Row Group大小。(记住这个问题,后续我们还会回来再谈这个问题的

5.小结:

本文主要是从数据的布局角度梳理了由行存储到RCFile的演变,分析了各种存储布局模式所合适的场景。下一篇我们将继续探讨这个问题,来看看ORCFile与Parquest的是如何更进步来解决大规模OLAP应用的数据存储格式的。

原文地址:https://www.cnblogs.com/happenlee/p/8992172.html

时间: 2024-11-09 02:09:01

大数据小视角1:从行存储到RCFile的相关文章

【转】大数据存取的选择:行存储还是列存储?

上个月参加了一个云存储的技术讨论会.这一个月里,陆续收到几位同学讨论大数据保存和处理的邮件.今天是周末,索性把这个月的交流内容整理写下来,供各位参考. 目前大数据存储有两种方案可供选择:行存储和列存储.业界对两种存储方案有很多争持,集中焦点是: 谁能够更有效地处理海量数据,且兼顾安全.可靠.完整性.从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局.在已知的几种大数据处理软件中,Hadoop 的 HBase 采用列存储,MongoDB 是文档型的行存储,Lexst

大数据小视角2:ORCFile与Parquet,开源圈背后的生意

上一篇文章聊了聊基于PAX的混合存储结构的RCFile,其实这里笔者还了解一些八卦,RCfile的主力团队都是来自中科院的童鞋在Facebook完成的,算是一个由华人主导的编码项目.但是RCfile仍然存在一些缺陷,后续被HortonWorks盯上之后上马了ORCFile格式,而老对头Cloudera则紧抱Google大腿推出了Parquet格式. 其实二者需要解决的问题是殊途同归的,但是不同的爹似乎导致了不太相同的命运.这篇文章,我们主要还是聊聊两者的技术细节,再穿插一些开源圈的商业八卦~~~

海量数据查询关系型数据库存储大数据,要点就是:简单存储、分区分表、高效索引、批量写入

海量数据查询 https://www.cnblogs.com/nnhy/p/DbForBigData.html 相当一部分大数据分析处理的原始数据来自关系型数据库,处理结果也存放在关系型数据库中.原因在于超过99%的软件系统采用传统的关系型数据库,大家对它们很熟悉,用起来得心应手. 在我们正式的大数据团队,数仓(数据仓库Hive+HBase)的数据收集同样来自Oracle或MySql,处理后的统计结果和明细,尽管保存在Hive中,但也会定时推送到Oracle/MySql,供前台系统读取展示,生成

大数据小项目之电视收视率企业项目实战01

一.VM安装(这个大家去百度吧....) 二.centos安装 版本:centos7 'https://jingyan.baidu.com/article/a3aad71aa180e7b1fa009676.html(具体可以看这个) 1.安装好之后,始终用自己的用户名操作(这个很重要,因为如果在不同的用户下登录,一旦出现问题,那就会搞死你的,哈哈哈) 2.网络配置 a.右键选择Centos客户机. b.点击"设置" c.网络适配器. 或者 注意:设置静态IP时,IP地址必须在192.1

大数据存储到底出了什么问题

当大数据现象在三年前刚刚兴起时,其对于存储企业而言,机房环境监控系统就如同久旱逢甘霖一样,许多存储厂商纷纷积极的投入该领域,并开启最大分贝的营销扬声器鼓吹大数据存储. 然而到了今天,存储行业的现实状况并不乐观. 一方面,大数据发展的潮流不断地全速前进.尽管企业对于大数据的Volume(大批量).Velocity(高速传递).Variety(多样性)等 特征一直保持着高度的兴致,但企业对于大数据技术的采用率仍然很低,主要仍集中在实验阶段.同时,一些大数据初创企业继续吸引着大量的资金,并认为这些大

Hadoop环境中管理大数据存储八大技巧

随着IT互联网信息技术的飞速发展和进步.目前大数据行业也越来越火爆,从而导致国内大数据人才也极度缺乏,下面介绍一下关于Hadoop环境中管理大数据存储技巧. 在现如今,随着IT互联网信息技术的飞速发展和进步.目前大数据行业也越来越火爆,从而导致国内大数据人才也极度缺乏,下面介绍一下关于Hadoop环境中管理大数据存储技巧. 1.分布式存储 传统化集中式存储存在已有一段时间.但大数据并非真的适合集中式存储架构.Hadoop设计用于将计算更接近数据节点,同时采用了HDFS文件系统的大规模横向扩展功能

在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析

在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析 低成本的Blob存储是一个强大的,通用的Hadoop兼容Azure存储解决方案无缝集成HDInsight.通过Hadoop分布式文件系统(HDFS)接口,完整的组件集合在HDInsight可以 在Blob存储数据的直接操作.在本教程中,学习如何建立一个容器的Blob存储,然后在里面处理的数据. 在BLOB存储中存储的数据能够用于计算的HDInsight集群被安全地删除,而不会丢失用户数据. 注意: 该ASV://语法中不支持

关于大数据相关的问答汇总,持续更新中~

NO.1 想要学好大数据需掌握哪些技术? 答:1,Java编程技术 Java编程技术是大数据学习的基础,Java是一种强类型语言,拥有极高的跨平台能力,可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等,是大数据工程师最喜欢的编程工具,因此,想学好大数据,掌握Java基础是必不可少的! 2.Linux命令 对于大数据开发通常是在Linux环境下进行的,相比Linux操作系统,Windows操作系统是封闭的操作系统,开源的大数据软件很受限制,因此,想从事大数据开发相关工作,还需

读<大数据日知录:架构与算法>有感

前一段时间, 一个老师建议我可以学学 '大数据' 和 '机器学习', 他说这必然是今后的热点, 学会了, 你就是香饽饽.在此之前, 我对大数据, 机器学习并没有很深的认识, 总觉得它们是那么的缥缈, 高不可攀, 也没想着深入学习.之后, 一次偶然的机会, 在csdn官方博客上看到了这样的一个活动 [置顶] 话题讨论&征文--谈论大数据时我们在谈什么 于是, 从下载试读样章, 到正式读书, 开始了学习大数据的过程... 到今天, 差不多两周过去了, 马马虎虎过了一遍, 感触颇多. 下面简单评价下我