zoukankan      html  css  js  c++  java
  • Hive探秘--文件格式与压缩格式

    HIVE的几种文件格式
    1、TEXTFILE
      文本格式,默认格式,数据不做压缩,磁盘开销大,数据解析开销大
      对应hive API为org.apache.hadoop.mapred.TextInputFormat和org.apache.hive.ql.io.HiveIgnoreKeyTextOutputFormat
      可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
    2、SequenceFile
      hadoop提供的二进制文件格式,hadoop支持的标准文件格式
      直接序列化到文件中,sequencefile文件不能直接查看,可以通过Hadoop fs -text查看
      具有使用方便,可分割、可压缩,可进行切片。压缩支持NONE,RECORD,BLOCK(优先),可进行切片
      对应hive API为:
      org.apache.hadoop.mapred.SequenceFileInputFormat和org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

    3、rcfile
      大多数hadoop和hive存储是行式存储,在大多数环境下比较高效,因为大多数表具有的字段数不大,且文件按块压缩对于需要处理重复数据的情况比较高效,同时处理和调试工具(more、head、awk)都能很好的适应行式存储的数据。
      但当需要操作的表有成百上千个字段,而操作只有一小部分字段时,往往造成很大的浪费,此时若采用列存储只操作需要的列便可大大提高性能
      rcfile是一种行列存储相结合的存储方式,先将数据按行进行分块再按列式存储,保证同一条记录在一个块上,避免读取多个块,有利于数据压缩和快速进行列存储。
      对应的hive API为org.apache.hadoop.hive.ql.io.RCFileInputFormat和org.apache.hadoop.hive.ql.io.RCFileOutputFormat

    行存储
      基于Hadoop系统行存储结构的有点是快速数据加载和动态负载的高适应能力,这是因为行存储保证了相同的数据域都在同一个集群节点,即同一个HDFS块。不过,行存储的缺点也是显而易见的,他不能支持快速查询处理,因为当查询仅针对多列表中的少数几列时,他不能跳过不必要的列读取;此外由于混合着不同数据值的列,行存储不易获得极高的压缩比,即空间利用率不易大幅提高。尽管通过熵解码和利用列相关性能够获得较好的压缩比,但是复杂数据存储实现会导致解压开销增大。

    列式存储

    列式存储和行式存储相比有哪些优势呢?
    可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。
    压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length Encoding和Delta Encoding)进一步节约存储空间。
    只读取需要的列,支持向量运算,能够获取更好的扫描性能。

    4、orcfile
    orcfile是对rcfile的优化,可以提高hive的读写、数据处理性能,提供更高的压缩效率。
    优点:
    每个task只输出单个文件,减少namenode负载
    支持各种复杂的数据类型,比如datetime,decimal以及复杂类型(struct,list,map,union)
    文件中存储了一些轻量级的索引数据
    基于数据类型的块模式压缩:integer类型的列用行程长度编码,String类型的列使用字典编码
    用多个互相独立的recordReaders并行读相同的文件
    无需扫描markers即可分割文件
    绑定读写所需内存
    metadata存储用protocol buffers,支持添加和删除列

    5、自定义格式

    若当前数据文件格式不能被当前hive所识别时,可以自定义文件格式,

    用户可通过实现InputFormat和OutputFormat来自定义输入输出格式。

    总结

    textfile 存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高
    sequencefile 存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载
    orcfile, rcfile存储空间最小,查询的效率最高 ,需要通过text文件转化来加载,加载的速度最低.
    orcfile, rcfile较有优势,orcfile,rcfile具备相当于行存储的数据加载和负载适应能力,扫描表时避免不必要的列读取,
    拥有比其他结构更好的性能,而使用列维度的压缩,能有效提升存储空间利用率。
    但orcfile, rcfile数据加载是性能损失较大,但由于hdfs一次写入多次读写,所以损失可以接受。
    SequenceFile,ORCFile(ORC),rcfile格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中,
    然后再从textfile表中导入到SequenceFile,ORCFile(ORC),rcfile表中。

    压缩格式

    参考文档:文件格式  http://www.2cto.com/database/201605/506775.html

         文件格式与压缩: http://blog.csdn.net/houzhizhen/article/details/53097106

    我要把所有的坑都趟平!
  • 相关阅读:
    在数组中寻找和为定值的n个数
    第九届蓝桥杯省赛第六题---递增三元组
    序列螺旋矩阵
    铁轨
    最长公共子串
    STL之vector,deque学习实例
    jdbc Date问题(util.Date和sql.Date)DatePreparedStatement.set
    inti-mothd
    获取HttpResponse并解析JSON数据
    could not find the main class,program will exit
  • 原文地址:https://www.cnblogs.com/loveling-0239/p/7382805.html
Copyright © 2011-2022 走看看