热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hive文件格式与压缩

Hive文件格式与压缩Hive支持的存储数据格式主要有:文本格式(TEXTFILE)、二进制序列化文件(SEQUENCEF

Hive文件格式与压缩

Hive支持的存储数据格式主要有:文本格式(TEXTFILE )、二进制序列化文件(SEQUENCEFILE)、行列式文件(RCFile)、优化的行列式文件(ORC)、PARQUET。其中优化的行列式文件(ORC)、PARQUET以其高效的数据存储和数据处理性能得以在实际的生产环境中大量运用。


注: TEXTFILESEQUENCEFILE的存储格式都是基于行式存储的;ORCPARQUET是基于列式存储的。



1.前置准备


实验环境


1)Oracle Linux 7.4

2)Java1.8.0_144

3)Hadoop2.7.4

4)Hive2.3.3

在这里插入图片描述


数据准备


查看股票交易信息的实验数据文件big_stocks.csv内容,共计207万5347行,数据以逗号“,”分隔,依次记录股票交易所编码、股票代码、股票交易日期、股票开盘价、股票开盘价、股票最低价、股票收盘价、股票交易量和股票成交价
在这里插入图片描述


2.实验流程


2.1 创建表stocks_txt

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


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


create table stocks_txt(exchanger string,symbol string,ymd string,price_open float,price_high float,proce_low float,price_close float,volume int,price_adj_close float
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile;

在这里插入图片描述


加载big_stocks.csv文件内容至表stocks_txt


LOAD DATA LOCAL INPATH '/root/experiment/datas/hive/big_stocks.csv' OVERWRITE INTO TABLE stocks_txt;

在这里插入图片描述


查看数据文件为.csv文本格式


命令端查看

dfs -lsr /data/hive/warehouse/stocks_txt;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XCu4seIf-1650764585158)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220424085920900.png)]

Web端查看

在这里插入图片描述


2.2 创建表stocks_orc

Orc (Optimized Row Columnar)是Hive 0.11版引入的新的存储格式。ORC存储的文件是一种带有模式描述的行列式存储文件,有别于传统的数据存储文件,它会将数据先按照行组进行切分,一个行组内部包含若干行,每一行再按列进行存储。例如:每个Orc文件由1个或多个stripe组成,每个stripe250MB大小,这个Stripe实际相当于RowGroup概念。


ORC文件结构由三部分组成:


条带(Stripe):ORC文件存储数据的地方。
文件脚注(File Footer):包含文件中stripe的列表,每个stripe的行数,以及每个列的数据类型。它还包含了每个列的最小值、最大值、行计数、求和等聚合信息。
Postscript:记录整个文件的压缩类型,含有压缩参数和压缩大小相关的信息。


Stripe结构也可以分为三个部分:


Index Data:它保存了所在条带的一些统计信息,以及数据在stripe中的位置索引信息。它是一个轻量级的索引,默认是每隔1W行做一个索引。这里做的索引应该只是记录某行的各字段在Row Data中的offset。
Row Data:存的是具体的数据,先取部分行,然后对这些行按列进行存储。对每个列进行了编码,分成多个Stream来存储。
Stripe Footer:存的是各个Stream的类型,长度等信息。
Row Data主要存储两部分的数据,即metadata stream和data stream:
metadata stream:用于描述每个行组的元数据信息;
data stream:存储数据的地方;


从上面的ORC文件结构可知ORC在每个文件中提供了3个级别的索引:


文件级:这一级的索引信息记录文件中所有stripe的位置信息,以及文件中所存储的每列数据的统计信息。 File Footer
条带级:该级别索引记录每个strpe所存储数据的统计信息。 Index Data
行组级:在stripe中,每隔10000行构成一个行组,该级别的索引信息就是记录这个行组中存储的数据的统计信息。 metadata stream
程序在查询ORC文件类型的表时,会先读取每一列的索引信息,将查找数据的条件和索引信息进行比较,找到满足查找条件的文件。接着根据文件中的索引信息,找到存储对应的查询条件数据stripe,再借助stripe的索引信息读取文件中满足查询条件的所有行组。之后再根据stripe中每个行组的索引信息和查询条件比对的结果,找到满足要求的列。

create table stocks_orc(exchanger string,symbol string,ymd string,price_open float,price_high float,proce_low float,price_close float,volume int,price_adj_close float
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS orc;

在这里插入图片描述


加载big_stocks.csv文件内容至表stocks_orc中


INSERT INTO stocks_orc SELECT * FROM stocks_txt;

在这里插入图片描述


2.3 创建表stocks_parquet

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

在一个Parquet类型的Hive表文件中,数据被分成多个行组(Row Group),一个行组包含这个行组对应的区间内的所有列的列块(column chunk)。一个列块负责存储某一列的数据,一个列块由page组成,page是压缩和编码的单元。Row Group是数据读写时的缓存单元。

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

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


在Parquet中,有三种类型的页:数据页、字典页和索引页


数据页用于存储当前行组中该列的值,字典页存储该列值的编码字典,每一个列块中最多包含一个字典页,索引页用来存储当前行组下该列的索引,目前Parquet中还不支持索引页。


创建存储数据格式为parquet的表stocks_parquet


create table stocks_parquet(exchanger string,symbol string,ymd string,price_open float,price_high float,proce_low float,price_close float,volume int,price_adj_close float
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS parquet;

加载big_stocks.csv文件内容至表parquet_stocks中


INSERT INTO stocks_parquet SELECT * FROM stocks_txt;

在这里插入图片描述


2.4 创建表stocks_sequence


设置块压缩格式


SET io.seqfile.compression.type=BLOCK;

创建存储数据格式为parquet的表stocks_sequence


create table stocks_sequence(exchanger string,symbol string,ymd string,price_open float,price_high float,proce_low float,price_close float,volume int,price_adj_close float
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS sequencefile;

加载big_stocks.csv文件内容至表parquet_stocks中


INSERT INTO stocks_sequence SELECT * FROM stocks_txt;

在这里插入图片描述


2.5 存储数据格式查询比较


文本格式存储表的统计查询


SELECT count(*) FROM stocks_txt;

在这里插入图片描述


orc存储表的统计查询


在这里插入图片描述


parquet格式存储表的统计查询


在这里插入图片描述


sequence格式存储表的统计查询


SELECT count(*) FROM stocks_sequence;

在这里插入图片描述


3. 实验总结


存储文件的压缩比:

ORC > Sequence >Parquet > textFile

综上所述,涉及到的4个查询经比较可知,在进行文本格式存储表查询时会调用MR任务,在实训开发中,我们应尽可能避免调用MR程序,降低时间成本消耗。


申明:文章仅做记录,涉及侵权内容请联系删除


推荐阅读
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
author-avatar
sl51866
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有