列式系统可提供的优势

  • 对于查询内容之外的列,不必执行I/O和解压(若适用)操作
  • 非常适合仅访问小部分列的查询.如果访问的列很多,则行存格式更为合适
  • 相比由多行构成的数据块,列内的信息熵更低,所以从压缩角度来看,列式存储通常会非常高效.换句话说,同一列中的数据比行存数据块中的数据更为相似.当某一列的取值不多是,行存与列存在压缩效果上的差异尤为显著
  • 数据仓库类型的应用需要在极大的数据集上对某些特定的列进行聚合操作,而列式存储格式通常很适合此类应用场景

显然,列式文件格式也常常出现在Hadoop的应用中.Hadoop支持的列式格式包括一度广泛应用为Hive格式的RPFile,以及其他格式,如ORC(Optimized Row Columnar),以及Parquet等.

RCFile

RCFile专为高效处理MapReduce应用程序而开发,尽管在时间过程中,它一般只作为Hive存储格式使用.RCFile的开发旨在快速加载和查询数据,以及更高效的利用存储空间.RCFile格式将文件按行进行分片,每个分片按列存储.

与SequenceFile相比,RCFile格式在查询与压缩性能方面有很多优势.但这种格式也存在一些缺陷,会阻碍查询时间和压缩空间的进一步优化.这些问题很多都可以由更为新型的列式存储格式(比如ORC与Parquet)化解.大部分不断涌现的应用很有可能放弃使用RCFile,改用新型的列存格式.不过,RCFile目前仍然是Hive中常用的存储格式.

ORC

ORC格式的开发初中是为了弥补RCFile格式方面的一些不足,尤其是查询性能和存储效率方面的缺陷.相比RCFile,ORC格式在很多方面都有显著进步,其特点和优势如下.

  • 通过特定类型(type-specific)的reader与writer提供轻量级的,在线的(always-on)压缩.ORC还支持使用zlib,LZO和Snappy压缩算法提供进一步的压缩
  • 能够将谓词下推至存储层,仅返回查询所需要的数据
  • 支持Hive类型的模型,包括新增的decimal类型与复杂类型.
  • 支持分片

Parquet

Parquet和ORC有很多相同的设计目标,但是Parquet有意成为Hadoop上的通用存储格式.Parquet的目标是成为能够普遍应用于不同MapReduce接口(如Java,Hive与Pig)的格式,同事也要适应其他处理引擎(如Impala与Spark).Parquet的优势如下,其中很多优势与ORC相同

  • 与ORC文件类似,Parquet允许金返回需要的数据字段,因此减少了I/O,提升了性能
  • 提供高效的压缩,可以在每列上指定压缩算法
  • 设计的初衷便是支持复杂的嵌套数据结构
  • 在文件尾部有完整的元数据信息存储,所以Parquet文件是自描述的
  • 完全支持通过Avro和Thrift API写入与读取
  • 使用可扩展的高效编码模式,比如 按位封装(bit-packaging)和游程编码(Run Length Encoding,RLE)

不同文件格式的失败行为

不同文件格式之间一个重要的差异在于如何处理数据错误,某些格式可以更好的处理文件损坏.

  • 列式格式虽然高效,但是在错误处理方面表现并不是很好,这是因为文件损毁可能导致行不完全.
  • 序列化格式在第一个出错的行之前能够正常读取,但是在随后的行中无法恢复
  • Avro的错误处理能力最强,出现错误记录时,读操作将在下一个同步点(syncpoint)继续,所以错误只会影响文件的一部分

Hadoop-No.4之列式存储格式的更多相关文章

  1. Parquet与ORC:高性能列式存储格式(收藏)

    背景 随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌 ...

  2. 深入分析Parquet列式存储格式【转】

    Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存储 列式存 ...

  3. Parquet 列式存储格式

    Parquet 列式存储格式 参考文章: https://blog.csdn.net/kangkangwanwan/article/details/78656940 http://parquet.ap ...

  4. 【转】深入分析 Parquet 列式存储格式

    Parquet 是面向分析型业务的列式存储格式,由 Twitter 和 Cloudera 合作开发,2015 年 5 月从 Apache 的孵化器里毕业成为 Apache 顶级项目,最新的版本是 1. ...

  5. Parquet列式存储格式

    Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存储 列式存 ...

  6. 深入分析Parquet列式存储格式

    Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存储 列式存 ...

  7. Hadoop IO基于文件的数据结构详解【列式和行式数据结构的存储策略】

    Charles所有关于hadoop的文章参考自hadoop权威指南第四版预览版 大家可以去safari免费阅读其英文预览版.本人也上传了PDF版本在我的资源中可以免费下载,不需要C币,点击这里下载. ...

  8. parquet列式文件实战(未完,待续)

    parquet列式文件实战 parquet code demo http://www.programcreek.com/java-api-examples/index.php?source_dir=h ...

  9. hadoop生态圈列式存储系统--kudu

    介绍 Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器.Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity hardware(商品硬件)上 ...

随机推荐

  1. Java-Redis 热部署问题

    项目请求时报错: java.lang.ClassCastException: cn.xingaohbd.seckil.model.User cannot be cast to cn.xingaohbd ...

  2. vim中ctrl+z,jobs,fg命令用法

    例如:vi test.cctrl + z 将vi 打开的test.c停止并转到后台又打开一个vi buf.cctrl + z 将vi 打开的buf.c停止并转到后台此时通过jobs可以看到任务列表通过 ...

  3. 阿里云服务器安装svn完整步骤,避免新手可能出现的所有错误

    centos6.8,没有安装svn的情况: 1.安装: yum install subversion (这一步一般不会错) 2.创建svn版本库: cd /root mkdir -p svn/proj ...

  4. 【2018】Python面试题【web框架】

    1.谈谈你对http协议的认识. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使 ...

  5. 【LOJ】#3095. 「SNOI2019」字符串

    LOJ#3095. 「SNOI2019」字符串 如果两个串\(i,j\)比较\(i < j\),如果离\(a_{i}\)最近的不同的数是\(a_{k}\),如果\(j < k\)那么\(i ...

  6. phpexcel 生成大于26列数据

    function excelExport2($fileName = '', $headArr = [], $data = [], $widths=[]) { ob_clean(); // $fileN ...

  7. Scala学习十一——操作符

    一.本章要点 标识符由字母,数字或运算符构成 一元和二元操作符其实是方法调用 操作符优先级取决于第一个字符,而结合性取决于最后一个字符 apply和update方法在对expr(args)表达式求值时 ...

  8. 基于S7协议实现与西门子PLC通信

    西门子PLC是目前工控行业市场占有额比较大的一款PLC,而且随着上位机的越来越普及, 有很多人开始考虑自己开发上位机实现与西门子PLC的通信,遇到的第一个问题就是数据通信. 其实西门子PLC提供的接口 ...

  9. golang(8):channel读写 & goroutine 通信

    goroutine 1.进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独 ...

  10. JS基础_打印出1-100之间所有的质数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...