【004hive基础】hive的文件存储格式与压缩

这篇具有很好参考价值的文章主要介绍了【004hive基础】hive的文件存储格式与压缩。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.hive的行式存储与列式存储

HIve的文件存储格式常见的有四种:textfile 、sequencefile、orc、parquet ,前面两种是行式存储,后面两种是列式存储。

hive的存储格式指表的数据是如何在HDFS上组织排列的。

 
如下图,箭头的方向代表了数据是如何进行(写入)组织排列的。

行式存储改为列存储,改压缩格式,hive,hive,大数据,hadoop
 

我们讨论一下行、列存储在读写上的特点:

行存储在数据写入和修改上的优势
写入:

行存储的写入是一次完成的,如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,可以保证数据的完整性。
 
列式存储写入需要把一行记录拆分成单列保存, 写入次数明显比行存储多(因为磁头调度次数多,而磁头调度是需要时间的,一般在 1ms~10ms),再加上磁头需要在盘片上移动和定位花费的时间,实际消耗更大。

修改:

数据修改实际上也是一次写入过程,不同的是,数据修改是对磁盘上的记录做删除标记。 行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。

因为行式存储写入和修改都是一次完成,相比列式存储需要将一行记录进行拆分,行式存储的优势还是比较明显的。
 
 
列式存储在数据读取和解析、分析数据上具有优势
数据读取方面:

  • 行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。
  • 列存储 每次读取的数据是集合的一段或者全部,不存在冗余性问题。

数据解析方面:

  • 列式存储中的每一列数据类型是相同的,不存在二义性问题,例如,某列类型为整型 int,那么它的数据集合一定是整型数据,这种情况使数据解析变得十分容易。
  • 相比之下,行存储则要复杂得多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗 CPU,增加了解析的时间。

 
所以列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域比较重要。

一般来说,一个 OLAP 类型的查询可能需要访问几百万或者几十亿行的数据,但是OLAP 分析时只是获取少数的列,对于这种场景列式数据库只需要读取对应的列即可,因此这种场景更适合列式数据库,可以大大提高 OLAP 数据分析的效率。

 
 

二. 存储格式

1. TEXTFILE

hive默认存储格式,数据不做压缩,磁盘开销大,数据解析开销大。

虽然可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作

 

2. ORC格式

Orc (Optimized Row Columnar)是hive 0.11版里引入的新的存储格式。

可以看到每个Orc文件由1个或多个stripe组成,每个stripe250MB大小,这个Stripe实际相当于RowGroup概念,不过大小由4MB->250MB,这样能提升顺序读的吞吐率。

行式存储改为列存储,改压缩格式,hive,hive,大数据,hadoop
每个Stripe里有三部分组成,分别是Index Data,Row Data,Stripe Footer:

  • Index Data:默认每隔1W行做一个索引。这里的索引只是记录某行的各字段在Row Data中的offset。
  • Row Data:存储具体数据,先取部分行(1万行?),然后对这些行按列进行存储。每个列都进行了编码,分成多个Stream来存储。
  • Stripe Footer:存储stripe的元数据信息:
    • File Footer,存储Stripe的行数,每个Column的数据类型信息等;
    • PostScript,记录了Stripe的压缩类型以及FileFooter的长度信息等。

 
数据读取逻辑:

读取文件时,

  • 会先seek到文件尾部读PostScript,解析到File Footer长度
  • 再读FileFooter,从里面解析到各个Stripe信息,再读各个Stripe,即从后往前读。

 

3. PARQUET格式 ing

Parquet文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的。

通常情况下,在存储Parquet数据的时候会按照HDFS的Block大小设置行组(多少行为一组?)大小。
由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,这样可以把每一个行组由一个Mapper任务处理,增大任务执行并行度。

Parquet文件的格式如下图所示:

行式存储改为列存储,改压缩格式,hive,hive,大数据,hadoop
上图展示了一个Parquet文件的内容,一个文件中可以存储多个行组,

  • 文件的首位是该文件的Magic Code,用于校验它是否是一个Parquet文件
  • Footer length记录了文件元数据的大小,通过该值和文件长度可以计算出元数据的偏移量
  • 元数据:包括行组的元数据信息和该文件存储数据的Schema信息。除了文件中每一个行组的元数据,每一页的开始都会存储该页的元数据。
  • 在Parquet中,有三种类型的页:数据页、字典页和索引页。
    • 数据页存储行组中该列的值;
    • 字典页存储该列值的编码字典,每一个列块中最多包含一个字典页
    • 索引页用来存储当前行组下该列的索引,目前Parquet中还不支持索引页。

 
 

三. Hive压缩格式

在实际工作当中,hive当中处理的数据,一般都需要经过压缩,使用压缩来节省我们的MR处理的网络带宽。

1. mr支持的压缩格式:

行式存储改为列存储,改压缩格式,hive,hive,大数据,hadoop
 
hadoop支持的解压缩的类:
行式存储改为列存储,改压缩格式,hive,hive,大数据,hadoop

 
压缩性能的比较:
行式存储改为列存储,改压缩格式,hive,hive,大数据,hadoop

 
hadoop需要配置的压缩参数:

行式存储改为列存储,改压缩格式,hive,hive,大数据,hadoop

 

2. hive配置压缩的方式:

2.1. 开启map端的压缩方式:

1.1)开启hive中间传输数据压缩功能
 hive (default)>set hive.exec.compress.intermediate=true;
1.2)开启mapreduce中map输出压缩功能
 hive (default)>set mapreduce.map.output.compress=true;
1.3)设置mapreduce中map输出数据的压缩方式
 hive (default)>set mapreduce.map.output.compress.codec
                  = org.apache.hadoop.io.compress.SnappyCodec;
1.4)执行查询语句
 select count(1) from score;

2.2.开启reduce端的压缩方式:

1)开启hive最终输出数据压缩功能
 hive (default)>set hive.exec.compress.output=true;
2)开启mapreduce最终输出数据压缩
 hive (default)>set mapreduce.output.fileoutputformat.compress=true;
3)设置mapreduce最终数据输出压缩方式
 hive (default)> set mapreduce.output.fileoutputformat.compress.codec 
                       = org.apache.hadoop.io.compress.SnappyCodec;
4)设置mapreduce最终数据输出压缩为块压缩
 hive (default)>set mapreduce.output.fileoutputformat.compress.type
                       =BLOCK;
5)测试一下输出结果是否是压缩文件
 insert overwrite local directory '/export/servers/snappy' 
       select * from score distribute by s_id sort by s_id desc;

 
 

四. hive中存储格式和压缩相结合

以ORC举例,相关配置参数:
行式存储改为列存储,改压缩格式,hive,hive,大数据,hadoop

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

1)建表语句
    create table log_orc_none(
    track_time string,
    url string,
    session_id string
    )ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
    STORED AS orc tblproperties ("orc.compress"="NONE");
2)插入数据
 insert into table log_orc_none select * from log_text ;
3)查看插入后数据
 dfs -du -h /user/hive/warehouse/myhive.db/log_orc_none;
 结果显示:
 7.7 M  /user/hive/warehouse/log_orc_none/123456_0

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

1)建表语句
    create table log_orc_snappy(
    track_time string,
    url string,
    session_id string
    )ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
    STORED AS orc tblproperties ("orc.compress"="SNAPPY");
2)插入数据
 insert into table log_orc_snappy select * from log_text ;
3)查看插入后数据
 dfs -du -h /user/hive/warehouse/myhive.db/log_orc_snappy ;
 结果显示: 
 3.8 M  /user/hive/warehouse/log_orc_snappy/123456_0
 
4)实际上:默认orc存储文件默认采用ZLIB压缩。比snappy压缩率还高。

存储方式和压缩总结:

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

 
 

五. hive主流存储格式性能对比

从存储文件的压缩比和查询速度两个角度对比

1. 压缩比比较

1)创建表,存储数据格式为TEXTFILE、ORC、Parquet
    create table log_text (
    track_time string,
    url string,
    session_id string,
    )ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
    STORED AS TEXTFILE  ;2)向表中加载数据
 load data local inpath '/export/servers/hivedatas/log.data' into table log_text ;3)查看表中数据大小,大小为18.1M
 dfs -du -h /user/hive/warehouse/myhive.db/log_text;

...
textfile:结果显示: 
 18.1 M  /user/hive/warehouse/log_text/log.data


ORC 结果显示:
 2.8 M  /user/hive/warehouse/log_orc/123456_0

Parquet结果显示:
13.1 M  /user/hive/warehouse/log_parquet/123456_0

数据压缩比结论: ORC > Parquet > textFile

 

2. 存储文件的查询效率测试

1)textfile
hive (default)> select count(*) from log_text;
_c0
100000
Time taken: 21.54 seconds, Fetched: 1 row(s)  

2)orc
hive (default)> select count(*) from log_orc;
_c0
100000
Time taken: 20.867 seconds, Fetched: 1 row(s) 


3)parquet
hive (default)> select count(*) from log_parquet; 
_c0
100000
Time taken: 22.922 seconds, Fetched: 1 row(s)

存储文件的查询效率比较: ORC > TextFile > Parquet

 
 

参考:
https://cloud.tencent.com/developer/article/1880494文章来源地址https://www.toymoban.com/news/detail-768153.html

到了这里,关于【004hive基础】hive的文件存储格式与压缩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于Hive中的存储格式及压缩格式详解

    最近面试,遇到了关于Hive的数据存储格式的问题,回答不尽人意,抽时间总结多看看关于Hive存储格式和压缩格式的内容。 Hive底层数据是以HDFS文件的形式存储在Hadoop中的,选择一个合适的文件存储格式及压缩方式,也是 Hive 优化的一个重点。不同的文件存储格式及压缩格式

    2024年02月04日
    浏览(69)
  • Hive ---- 文件格式和压缩

    为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器,如下表所示: Hadoop查看支持压缩的方式hadoop checknative。 Hadoop在driver端设置压缩。 压缩性能的比较: 为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择

    2024年02月16日
    浏览(32)
  • hive之文件格式与压缩

      为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择text file、orc、parquet、sequence file等。 文本文件就是txt文件,我们默认的文件类型就是txt文件 ORC介绍:   ORC(Optimized Row Columnar)file format是Hive 0.11版里引入的

    2024年02月16日
    浏览(36)
  • (10)Hive的相关概念——文件格式和数据压缩

    目录 一、文件格式 1.1 列式存储和行式存储 1.1.1 行存储的特点 1.1.2 列存储的特点 1.2 TextFile 1.3 SequenceFile 1.4  Parquet 1.5 ORC 二、数据压缩  2.1 数据压缩-概述  2.1.1 压缩的优点  2.1.2 压缩的缺点 2.2 Hive中压缩配置 2.2.1 开启Map输出阶段压缩(MR 引擎) 2.2.2 开启Reduce输出阶

    2024年02月22日
    浏览(32)
  • hive文件存储格式orc和parquet详解

    hive支持的文件类型:textfile、sequencefile(二进制序列化文件)、rcfile(行列式文件)、parquet、orcfile(优化的行列式文件) 带有描述式的行列式存储文件。将数据分组切分,一组包含很多行,每一行再按例进行存储。 orc文件结合了行式和列式存储结构的优点,在有大数据量扫

    2024年02月03日
    浏览(29)
  • 大数据开发之Hive(压缩和存储)

    Hive不会强制要求将数据转换成特定的格式才能使用。利用Hadoop的InputFormat API可以从不同数据源读取数据,使用OutputFormat API可以将数据写成不同的格式输出。 对数据进行压缩虽然会增加额外的CPU开销,但是会节约客观的磁盘空间,并且通过减少内存的数据量而提高I/O吞吐量会

    2024年01月17日
    浏览(33)
  • 什么是列式存储和行式存储

    列式存储是指 一列中的数据 在存储介质中是连续存储的; 行式存储是指 一行中的数据 在存储介质中是连续存储的。 简单的说,可以把 列式数据库认为是每一列都是一个表 ,这个表只有一列,如果只在该列进行条件查询,速度就很快。 传统的 行式数据库 将一个个完整的

    2024年02月04日
    浏览(44)
  • 数据仓库内容分享(三):行式存储VS列式存储

    目录 行式存储 列式存储 行存储、列存储对比 数据写入对比 数据读取对比 代码模拟行存和列存 行式存储、列式存储的主流数据库 行式存储数据库 列式存储数据库 行列混存数据库 Row-based storage storesatable in a sequence of rows 常见的 TP 库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式

    2024年02月22日
    浏览(36)
  • Hive底层数据存储格式

    在大数据领域,Hive是一种常用的数据仓库工具,用于管理和处理大规模数据集。Hive底层支持多种数据存储格式,这些格式对于数据存储、查询性能和压缩效率等方面有不同的优缺点。本文将介绍Hive底层的三种主要数据存储格式:文本文件格式、Parquet格式和ORC格式。 文本文

    2024年02月12日
    浏览(48)
  • 如何压缩RAR格式文件?

    RAR是我们日常生活工作中经常用到的压缩文件格式之一,那么RAR文件如何压缩呢? 不管压缩哪种格式的压缩文件,我们都需要用到压缩软件。针对RAR格式,我们可以选择最常见的WinRAR,当然如果有同样适用于RAR格式的压缩软件也是可以的。 压缩RAR文件: 首先,下载并安装

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包