精华内容
下载资源
问答
  • hive文件存储

    2018-03-23 09:39:03
    Hive支持的文件存储格式有 - TEXTFILE - SEQUENCEFILE - RCFILE - 自定义格式 在建表的时候,可以使用STORED AS子句指定文件存储的格式。TEXTFILE 即通常说的文本格式,默认长期,数据不做压缩,磁盘开销大、...

    Hive支持的文件存储格式有 
    - TEXTFILE 
    - SEQUENCEFILE 
    - RCFILE 
    - 自定义格式 
    在建表的时候,可以使用STORED AS子句指定文件存储的格式。

    TEXTFILE 
    即通常说的文本格式,默认长期,数据不做压缩,磁盘开销大、数据解析开销大。 
    SEQUENCEFILE 
    Hadoop提供的一种二进制格式,使用方便、可分割、可压缩,并且按行进行切分 
    RCFILE 

    一种行列存储相结合的存储方式,首先,其将数据按行分块,保证同一条记录在一个块上,避免读一条记录多个块。其次,块上的数据按照列式存储,有利于数据压缩和快速地进行列存取。

    ORC

    全称是(Optimized Record Columnar),使用ORC文件格式可以提高hive读、写和处理数据的能力。ORC在RCFile的基础上进行了一定的改进,所以与RCFile相比,具有以下一些优势: 

    - 1、ORC中的特定的序列化与反序列化操作可以使ORC file writer根据数据类型进行写出。 
    - 2、提供了多种RCFile中没有的indexes,这些indexes可以使ORC的reader很快的读到需要的数据,并且跳过无用数据,这使得ORC文件中的数据可以很快的得到访问。 
    - 3、由于ORC file writer可以根据数据类型进行写出,所以ORC可以支持复杂的数据结构(比如Map等)。 
    - 4、除了上面三个理论上就具有的优势之外,ORC的具体实现上还有一些其他的优势,比如ORC的stripe默认大小更大,为ORC writer提供了一个memory manager来管理内存使用情况。 
    自定义文件格式 

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


    ORC详解

    在ORC格式的hive表中,记录首先会被横向的切分为多个stripes,然后在每一个stripe内数据以列为单位进行存储,所有列的内容都保存在同一个文件中。每个stripe的默认大小为256MB,相对于RCFile每个4MB的stripe而言,更大的stripe使ORC的数据读取更加高效。 
      对于复杂数据类型,比如Map,ORC文件会将一个复杂数据类型字段解析成多个子字段。下表中列举了ORC文件中对于复杂数据类型的解析

    Data typeChile columns
    Array一个包含所有数组元素的子字段
    Map两个子字段,一个key字段,一个value字段
    Struct每一个属性对应一个子字段
    Union每一个属性对应一个子字段

      当字段类型都被解析后,会由这些字段类型组成一个字段树,只有树的叶子节点才会保存表数据,这些叶子节点中的数据形成一个数据流,如上图中的Data Stream。 
      为了使ORC文件的reader更加高效的读取数据,字段的metadata会保存在Meta Stream中。在字段树中,每一个非叶子节点记录的就是字段的metadata,比如对一个array来说,会记录它的长度。下图根据表的字段类型生成了一个对应的字段树。 
      

    RCFile

    RCFile文件格式是FaceBook开源的一种Hive的文件存储格式,首先将表分为几个行组,对每个行组内的数据进行按列存储,每一列的数据都是分开存储,正是先水平划分,再垂直划分的理念。

    这里写图片描述

    在存储结构上: 
    如上图是HDFS内RCFile的存储结构,我们可以看到,首先对表进行行划分,分成多个行组。一个行组主要包括:16字节的HDFS同步块信息,主要是为了区分一个HDFS块上的相邻行组;元数据的头部信息主要包括该行组内的存储的行数、列的字段信息等等;数据部分我们可以看出RCFile将每一行,存储为一列,将一列存储为一行,因为当表很大,我们的字段很多的时候,我们往往只需要取出固定的一列就可以。 
    在一般的行存储中 select a from table,虽然只是取出一个字段的值,但是还是会遍历整个表,所以效果和select * from table 一样,在RCFile中,像前面说的情况,只会读取该行组的一行。 
    在一般的列存储中,会将不同的列分开存储,这样在查询的时候会跳过某些列,但是有时候存在一个表的有些列不在同一个HDFS块上(如下图),所以在查询的时候,Hive重组列的过程会浪费很多IO开销。

    列存储

    而RCFile由于相同的列都是在一个HDFS块上,所以相对列存储而言会节省很多资源。

    在存储空间上: 
    RCFile采用游程编码,相同的数据不会重复存储,很大程度上节约了存储空间,尤其是字段中包含大量重复数据的时候。

    懒加载: 
    数据存储到表中都是压缩的数据,Hive读取数据的时候会对其进行解压缩,但是会针对特定的查询跳过不需要的列,这样也就省去了无用的列解压缩。

    针对行组来说,会对一个行组的a列进行解压缩,如果当前列中有a>1的值,然后才去解压缩c。若当前行组中不存在a>1的列,那就不用解压缩c,从而跳过整个行组。



    展开全文
  • hive文件存储格式

    2020-02-02 16:17:00
    hive文件存储格式文件存储格式列式存储之parquet列式存储之orc格式snappy 压缩 文件存储格式 hive支持的文件存储格式主要textFile , sequenceFile ,orc , parquet file ,text file 和 sequencefile 都是基于行式...

    文件存储格式

    hive支持的文件存储格式主要textFile , sequenceFile ,orc , parquet file ,text file 和 sequencefile 都是基于行式存储的 。
    orc 和 parquet file 是列式存储存储的 , 可以针对性的设计更好的压缩算法。
    在这里插入图片描述

    列式存储之parquet

    在这里插入图片描述 一. parquet的 文件的格式和架构
    parquet文件是一个二进制的文件 , 不可直接读取 , 因为其包含元数据 和 原始数据 , 所以是自解析的
    1.行组( row group )
    每一个行组包括一定的行数, 是一个hdfs的具体文件 , 类似是一个orc文件的stripe,存储了一定行数的一个文件
    2 列块 ( column group)
    每一个行组的所有信息存储在一个列块中
    每一个行组的每一个列块的所有数据的类型都是相同的不同的列块可能使用不同压缩方式进行压缩。
    3 页 ( page)
    每一个列块可以分成多个页, 每一个页是最小的压缩和存储的单元 , 每一个页可以使用不同的压缩算法、 编码方式的 压缩


    4 其他信息
    上图展示了一个parquet文件的内容 , 一个文件可以存储多个行组 , 每一个文件的首位是一个magic code, 用来校验他是不是一个parquet文件 , foooterlength 记录了数据的原始文件的大小,通过改值可以计算出文件的大小和偏移量
    在每一个page中也保留了文件的大小和偏移量信息 , 每隔页都会存储相关的元数据信息 。 parquet的页分三种 :
    1) 数据页
    存储当前的行组中数据的值
    2) 字典页
    存储该页面的编码字典 ,每一个列块都会包含一个字典页面
    3) 索引页
    用来存储发当前行组下该列的索引

    列式存储之orc格式

    在这里插入图片描述由上图可以看到 , 一个orc 文件由多个stripe 构成 ,每一个stripe 分为三部分(index Data | Row data | Stripe footer 来构成)
    1 index data
    记录 一个轻量级的元数据信息 ,存储某行的某一个字段在数据中的原始数据的信息 ,默认每1w 行做一次的数据的索引信息
    2 Row data
    存储原始的数据信息 : 取部分行(一个stripe的数据),取该数据对其按照列使用stream的方式进行存储
    3 stripe footer

    • file footer : 存储的是每隔stripe的函数 ,每一个column的数据类型信息等;
    • Postscripts : 记录了整个文件的压缩类型 , 一级fileFooter的长度信息等
    • 当读取文件时 ,先查找道每一个文件的post stripe 的信息 ,获得file footer的信息 ,再读取每一个stripe的信息

    存储文件的压缩比总结:
    ORC > Parquet > textFile
    存储文件的查询速度总结:查询速度相近。

    snappy 压缩

    优点: 支持合理的 压缩速率 和合理的压缩率,不支持 split, 是spark的默认的压缩方式,hadoop原生不支持

    TextFile格式

    默认格式,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用,但使用Gzip这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

    Gzip

    linux 原生支持 ,hadoop原生支持 ,不支持split ,文件在130M 以内都可以考虑使用Gzip

    展开全文
  • 二、Hive文件存储格式 三、创建语句和压缩 一、存储格式行存储和列存储 行存储可以理解为一条记录存储一行,通过条件能够查询一整行数据。 列存储,以字段聚集存储,可以理解为相同的字段存储在一起。 二、Hive...

    一、存储格式行存储和列存储

    1. 行存储可以理解为一条记录存储一行,通过条件能够查询一整行数据。
    2. 列存储,以字段聚集存储,可以理解为相同的字段存储在一起。

    二、Hive文件存储格式

    1. TEXTFILE,
    • Hive数据表的默认格式,存储方式:行存储。
    • 可以使用Gzip压缩算法,但压缩后的文件不支持split
    • 在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍。
    1. SEQUENCEFILE
    • 压缩数据文件可以节省磁盘空间,但Hadoop中有些原生压缩文件的缺点之一就是不支持分割。支持分割的文件可以并行的有多个mapper程序处理大数据文件,大多数文件不支持可分割是因为这些文件只能从头开始读。Sequence File是可分割的文件格式,支持Hadoop的block级压缩。
    • Hadoop API提供的一种二进制文件,以key-value的形式序列化到文件中。存储方式:行存储。
    • sequencefile支持三种压缩选择:NONE,RECORD,BLOCK。Record压缩率低,RECORD是默认选项,通常BLOCK会带来较RECORD更好的压缩性能。
    • 优势是文件和hadoop api中的MapFile是相互兼容的
    1. RCFILE
      存储方式:数据按行分块,每块按列存储。结合了行存储和列存储的优点:
    • RCFile 保证同一行的数据位于同一节点,因此元组重构的开销很低
    • 像列存储一样,RCFile 能够利用列维度的数据压缩,并且能跳过不必要的列读取
    • 数据追加:RCFile不支持任意方式的数据写操作,仅提供一种追加接口,这是因为底层的 HDFS当前仅仅支持数据追加写文件尾部。
    • 行组大小:行组变大有助于提高数据压缩的效率,但是可能会损害数据的读取性能,因为这样增加了 Lazy 解压性能的消耗。而且行组变大会占用更多的内存,这会影响并发执行的其他MR作业。 考虑到存储空间和查询效率两个方面,Facebook 选择 4MB 作为默认的行组大小,当然也允许用户自行选择参数进行配置。
    1. ORCFILE
      存储方式:数据按行分块,每块按照列存储。
      压缩快,快速列存取。效率比rcfile高,是rcfile的改良版本。

    三、创建语句和压缩

    3.1、压缩工具的对比:

    image

    Hadoop编码/解码器方式,如下表所示

    压缩格式 对应的编码/解码
    DEFAULT org.apache.hadoop.io.compress.DefaultCodec
    Gzip org.apache.hadoop.io.compress.GzipCodec
    Bzip org.apache.hadoop.io.compress.BzipCodec
    Snappy org.apache.hadoop.io.compress.SnappyCodec
    Lzo org.apache.hadoop.io.compress.LzopCodec

    3.2、压缩设置

    HiveQL语句最终都将转换成为hadoop中的MapReduce job,而MapReduce job可以有对处理的数据进行压缩。

    Hive中间数据压缩

    hive.exec.compress.intermediate:默认为false,设置true为激活中间数据压缩功能,就是MapReduce的shuffle阶段对mapper产生中间压缩,在这个阶段,优先选择一个低CPU开销:

    set hive.exec.compress.intermediate=true
    set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec
    set mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec

    最终输出结果压缩
    hive.exec.compress.output:用户可以对最终生成的Hive表的数据通常也需要压缩。该参数控制这一功能的激活与禁用,设置为true来声明将结果文件进行压缩。

    mapred.output.compression.codec:将hive.exec.compress.output参数设置成true后,然后选择一个合适的编解码器,如选择SnappyCodec。设置如下(两种压缩的编写方式是一样的):

    set hive.exec.compress.output=true 
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec
    或者
    或者
    
    set mapred.output.compress=true
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.LzopCodec

    3.3、 四种格式的存储和压缩设置(客户端设置压缩格式)

    1. TEXTFILE

    create table if not exists textfile_table(
    site string,
    url  string,
    pv   bigint,
    label string)
    row format delimited
    fields terminated by '\t'
    stored as textfile;
    插入数据操作:
    set hive.exec.compress.output=true; //输出结果压缩开启  
    set mapred.output.compress=true;  
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  
    set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  //压缩和解压缩编码类列表,用逗号分隔,将所用到解压和压缩码设置其中
    insert overwrite table textfile_table select * from testfile_table;  

    2. SEQUENCEFILE

    create table if not exists seqfile_table(
    site string,
    url  string,
    pv   bigint,
    label string)
    row format delimited
    fields terminated by '\t'
    stored as sequencefile;
    插入数据操作:
    set hive.exec.compress.output=true;  
    set mapred.output.compress=true;  
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  
    set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  
    SET mapred.output.compression.type=BLOCK;
    insert overwrite table seqfile_table select * from testfile_table;  

    3. RCFILE

    create table if not exists rcfile_table(
    site string,
    url  string,
    pv   bigint,
    label string)
    row format delimited
    fields terminated by '\t'
    stored as rcfile;
    插入数据操作:
    set hive.exec.compress.output=true;  
    set mapred.output.compress=true;  
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  
    set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  
    insert overwrite table rcfile_table select * from testfile_table;

    4. ORCFILE

    create table if not exists orcfile_table(
    site string,
    url  string,
    pv   bigint,
    label string)
    row format delimited
    fields terminated by '\t'
    stored as orc;
    插入数据操作:
    set hive.exec.compress.output=true;  
    set mapred.output.compress=true;  
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  
    set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  
    insert overwrite table orcfile_table select * from testfile_table;

    总结:

    1. TextFile默认格式,加载速度最快,可以采用Gzip进行压缩,压缩后的文件无法split,无法并行处理了。

    2. SequenceFile压缩率最低,查询速度一般,将数据存放到sequenceFile格式的hive表中,这时数据就会压缩存储。三种压缩格式NONE,RECORD,BLOCK。是可分割的文件格式。

    3. RCfile压缩率最高,查询速度最快,数据加载最慢。
    4. 相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。

    5. 在hive中使用压缩需要灵活的方式,如果是数据源的话,采用RCFile+bz或RCFile+gz的方式,这样可以很大程度上节省磁盘空间;而在计算的过程中,为了不影响执行的速度,可以浪费一点磁盘空间,建议采用RCFile+snappy的方式,这样可以整体提升hive的执行速度。至于lzo的方式,也可以在计算过程中使用,只不过综合考虑(速度和压缩比)还是考虑snappy适宜。

    转载于:https://www.cnblogs.com/skyice/p/10459345.html

    展开全文
  • HIve文件存储格式

    1、存储格式

    (1)Hive支持的存储数据的主要格式

    行式存储:TEXTFILE SEQUENCEFILE

     

    列式存储:ORCPARQUET

    存储的特点:

    查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。

    列式存储的特点:

    因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

    (2)存储格式设置

    创建表,存储数据格式为TEXTFILE

    create table log_text (
    track_time string,
    url string,
    session_id string,
    referer string,
    ip string,
    end_user_id string,
    city_id string
    )
    row format delimited fields terminated by '\t'
    stored as textfile ;
    

    创建表,存储数据格式为ORC

    create table log_orc(
    track_time string,
    url string,
    session_id string,
    referer string,
    ip string,
    end_user_id string,
    city_id string
    )
    row format delimited fields terminated by '\t'
    stored as orc ;
    

    创建表,存储数据格式为parquet

    create table log_parquet(
    track_time string,
    url string,
    session_id string,
    referer string,
    ip string,
    end_user_id string,
    city_id string
    )
    row format delimited fields terminated by '\t'
    stored as parquet ;	
    

    (3)存储文件的压缩比总结

    ORC >  Parquet >  textFile

    2、压缩方式

    (1)查看hadoop支持的压缩方式

    hadoop checknative

    (2)安装Snappy

    将将编译好的支持Snappy压缩的hadoop-2.7.2/lib/native里面的所有内容复制到开发集群的hadoop-2.7.2/lib/native路径上

    分发集群

    xsync native/

    重新启动hadoop集群和hive

    (3)压缩与存储格式的结合使用

    创建一个非压缩的的ORC存储方式

    create table log_orc_none(
    track_time string,
    url string,
    )
    row format delimited fields terminated by '\t'
    stored as orc tblproperties ("orc.compress"="NONE");
    

    创建一个SNAPPY压缩的ORC存储方式

    create table log_orc_snappy(
    track_time string,
    url string,
    )
    row format delimited fields terminated by '\t'
    stored as orc tblproperties ("orc.compress"="SNAPPY");
    

    (4)存储方式和压缩总结

    在实际的项目开发当中,hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy,lzo。

    展开全文
  • Hive文件存储格式

    2019-08-18 16:48:43
    hive文件存储格式包括以下几类: 1、TEXTFILE 2、SEQUENCEFILE 3、RCFILE 4、ORCFILE(0.11以后出现)-支持有限5、Parquet-主要是用在Cloudera Impala上面其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入...
  • Hive文件存储格式有哪些? 1.TextFile 文本格式 2.RCFile 一种列存储格式 3.ORC ★ 一种列存储格式 进阶版RCFile 4.Parquet ★ 一种列存储格式 5.AVRO 6.JsonFile json文件 7.InputFormat ...
  • Hive学习笔记 --- Hive文件存储格式
  • HIVE文件存储格式

    千次阅读 2013-09-06 10:37:14
    HIVE文件存储格式 Hive文件存储格式包括以下几类: TEXTFILE SEQUENCEFILE RCFILE ORCFILE 其中textfile为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理。 ...
  • 二、Hive文件存储格式 TEXTFILE Hive数据表的默认格式,存储方式:行存储。 可以使用Gzip压缩算法,但压缩后的文件不支持split 在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比...
  • 整理了一下网上的几种Hive文件存储格式的性能与Hadoop的文件存储格式。 Hive的三种文件格式:TEXTFILE、SEQUENCEFILE、RCFILE中,TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的,RCFILE是基于行列混合的思想...
  • Hive文件存储格式 1、 TEXTFILE Hive数据表的默认格式,存储方式:行存储 可以使用Gzip压缩算法 在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍 2、...
  • 一、hive文件存储格式 Hive支持的存储数的格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET。 上图左边为逻辑表,右边第一个为行式存储,第二个为列式存储。 行存储的特点:查询满足条件的一整行数据的...
  • hive文件存储格式包括以下几类:TEXTFILESEQUENCEFILERCFILE自定义格式其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理。SequenceFile,RCFile格式的表不能...
  • 文件存储格式引言1、TextFile2、sequencefile3、orc4、 parquet 引言 \quad \quadHive支持的存储数的格式主要有:TextFile、SEQUENCEFILE、ORC、PARQUET。其中,TEXTFILE、SEQUENCEFILE是基于行存储,ORC、PARQUET...
  • 前言 Hive支持的存储数的格式主要有:TEXTFILE 、SEQUENCEFILE、ORC、PARQUET。 行与列存储的特点 行存储的特点 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的...Hive文件存储格式以及优缺
  • hive 文件存储格式

    2021-02-08 11:29:56
    Hive支持的存储数据的格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET。 8.4.1 列式存储和行式存储 如图所示左边为逻辑表,右边第一个为行式存储,第二个为列式存储。 1)行存储的特点 查询满足条件的一...
  • Hive 文件存储格式

    2020-03-19 21:48:00
    Apache Hive支持Apache Hadoop中使用的几种熟悉的文件格式,如TextFile,RCFile,SequenceFile,AVRO,ORC和Parquet格式。 ClouderaImpala也支持这些文件格式。 在建表时使用STORED AS (TextFile|RCFile|...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,413
精华内容 1,765
关键字:

hive文件存储