Hive学习---6、文件格式和压缩

news2025/2/25 12:31:55

1、文件格式和压缩

1.1 Hadoop压缩概述

由于Hive是相当于与Hadoop的客户端,所以hadoop会啥压缩,Hive基本就会啥压缩。

压缩格式算法文件扩展名是否可切分
DEFLATEDEFLATE.deflate
GzipDEFLATE.gz
bzip2bzip2.bz2
LZOLZO.lzo
SnappySnappy.snappy
为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器,如下表所示:
Hadoop查看支持压缩的方式hadoop checknative。
Hadoop在driver设置压缩
压缩格式对应的编码/解码器
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
Snappyorg.apache/hadoop.io.compress.SnappyCodec

压缩性能的比较

压缩算法原始文件大小压缩文件大小压缩速度解压速度
gzip8.3GB1.8GB17.5MB/s58MB/s
bzip28.3GB1.1GB2.4MB/s9.5MB/s
LZO8.3GB2.9GB49.3MB/s74.6MB/s

1.2 Hive文件格式

为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择text file、orc、parquet、sequence filed等。

1.2.1 Text File

文本文件是Hive默认使用的文件格式,文本文件中的一行内容,就对应Hive表中的一行记录。

可以通过以下建表语句指定文件格式为文本文件

create table table_name
(colum_specs)
stroed as textfile;
1.2.2 ORC

1、文件格式
ORC(Optimized Row Columnar)file format 是Hive 0.11版里引入的一种列式储存的文件格式。ORC文件能够提高Hive读写数据和处理数据的性能。

与列示储存相对的是行式储存,下图是两者的对比
在这里插入图片描述
如图所示左边为逻辑表,右边第一个是行式储存,第二个为列式储存。
(1)行储存的特点
查询满足条件的一整行数据的时候,列示储存则需要去每个聚集的字段找到对应的每个列的值,行式储存只需要找到其中的一个值,其余的值都在相邻的地方,所以此时行储存查询的速度更快。
(2)列储存的特点
因为每个字段的数据都聚集储存,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式储存可以针对性的设计更好的设计压缩算法。
前文提到的text file和sequence file都是基于行储存的,orc和parquet是基于列式储存的。

orc文件的具体结果如下图所示:
在这里插入图片描述
每个ORC稳定有Header、Body和Tail三部分组成。

其中Header内容为ORC,用于表示文件类型。

Body有一个或多个strip组成,每个stripe一般为HDFS的块大小,每一个strip包含多条记录,这些记录按照列进行独立储存,每个stripe里有三部分组成,分别是Index Data,Row Data,Stripe Footer。

Index Data:一个轻量级index,默认是为各列每隔1w行做一个索引。每个索引会记录第n万行的位置,和最近一万行的最大值和最小值等信息。

Row Data:存的是具体的数据,按列进行储存,并对每个列进行编码,分成多个Stripe来储存。

Stripe Footer:存放的是各个Stripe的文职以及各column的编码信息。

Tail由File Footer和PostScript组成。FIle Footer中保存了各Stripe的起始位置、索引长度、数据长度信息,各Column的统计信息等;PostStript记录了整个文件的压缩类型以及File Footer的长度信息。

在读取ORC文件的时候,会先从最后一个字节读取PostScript长度,进而读取到postScript,从里面解析到File Footer长度,进而读取FileFooter,从中解析到各个Stripe信息,再读各个Stripe,即从后往前读。

(3)建表语句

create table table_name
(column_specs)
stored as orc
tblproperties(property_name=property_value)

ORC文件格式支持的参数如下:

参数默认值说明
orc.compressZLIB压缩格式,可选项:NONE、ZLIB、SNAPPY
orc.compress.size262144每个压缩块的大小(ORC文件是分块压缩的)
orc.stripe.size67108864每个Stripe的大小
orc.row.index.stirpe10000索引步长(每隔多少行数据建一条索引)
1.1.3 Parquet

Parquet文件是Hadoop生态中一个通用的文件格式,它也是一个列式储存的文件格式。

Parquet文件的格式如下图所示:
在这里插入图片描述
上图展示了一个Parquet文件的基本结构,文件的首尾都是该文件的Magic Code,用于校验它是否是一个Parquet文件。

首尾中间由若干个Row Group 和Footer(File Meta Data)组成。

每个Row Group包含多个Column Chunk,每个Column Chunk包含多个Page。以下是Row Group、Column Chunk和Page三个概念的说明:

行组(Row Group):一个行组对应逻辑表中的若干行
列块(Column Chunk):一个行组中的一列保存在一个列块中
页(Page):一个列块的数据会划分为若干个页。

Footer(File Meta Data)中存储了每个行组(Row Group)中的每个列块(Column Chunk)的元数据信息,元数据信息包括了该列的数据类型、该列的编码方式、该类的Data Page位置等信息。

建表语句

create table table_name
(column_specs)
stored as parquet
tblproperties(property_name=property_value,...)

支持的参数如下:

参数默认值说明
parquet.compressionuncompressed压缩格式,可选项:uncompressed,snappy,gzip,lzo,brotli,lz4
parquet.block.size134217728行组大小,通常与HDFS块大小保持一致
parquet.page.size1048576页大小

1.3 压缩

在Hive表和计算过程中,保存数据的压缩,对磁盘空间的有效利用和提高查询性能都是十分有益的。

1.3.1 Hive表数据进行压缩

在Hive中,不同文件类型的表,声明数据压缩的方式是不同的。

1、TextFile
若一张表的文件类型为TextFile,若需要对该表中的数据进行压缩,多数情况下,无需在建表语句做出声明。直接将压缩的文件导入到该表即可,Hive在查询表中数据时,可自动识别其压缩格式,进行解压。

需要注意的是,在执行往表中导入数据的SQL语句时,用户需设置以下参数,来保证写入表中的数据是被压缩的。

--SQL语句的最终输出结果是否压缩
set hive.exec.compress.output=true;
--输出结果的压缩格式(下面示例是snappy)
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

2、ORC
若一张表的文件类型是ORC,若需要对该表进行压缩,需要在建表语句中声明压缩格式如下:

create table orc_table
(column_specs)
stored as orc
tblproperties("orc.compredd"="snappy");

3、Parquet
若一张表的文件类型为Parquet,若需要对该表数据进行压缩,需在建表语句中声明压缩格式如下:

create table Parquet_table
(column_specs)
stored as parquet
tblproperties("parquet.compression"="snappy");
1.3.2 计算过程中使用压缩

1、单个MR的中间结果进行压缩
单个MR的中间结果是指Mapper输出的数据,对其进行压缩可降低shuffle阶段的网络IO,可通过以下参数进行配置:

--开启MapReduce中间数据压缩功能
set mapreduce.map.output.compress=true;

--设置MapReduce中间数据的压缩方式(下面以snappy为例)
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

2、单条SQL语句的中间结果进行压缩
单条SQL语句的中间结果是指,两个MR(一条SQL语句可能需要通过MR进行计算)之间的临时数据,可通过以下参数进行配置:

--是否对两个MR之间的临时数据进行压缩
set hive.exec.compress.intermediate=true;
--压缩格式
set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

页面置换算法(LRU,CLOCK,LFU)

在操作系统的数据库中,使用驱逐算法来实现内存和磁盘之间的交互。当内存空间已满且需要将磁盘上的页面添加到内存中时,就需要将内存中的一个页面换出,以保证内存空间不会溢出。我们希望尽可能多地访问内存中的页面。 LRU算法 LRU算法&#…

0基础学习VR全景平台篇第38章:场景功能-AI虚拟人实操完整教程

AI虚拟人功能正式上线! 依托“虚拟数字人引擎”结合VR全景,为各行各业提供虚拟形象生成、驱动、交互服务,帮助海量用户的VR全景作品,打造成为更具沉浸感的VR交互项目,提升作品变现能力。 功能位置示意 一、什么是AI虚…

会声会影视频乱码什么原因 会声会影视频乱码怎么处理

会声会影编辑视频的过程中,如果遇到素材乱码的问题,是会让人十分崩溃的。毕竟素材来之不易,无论是重新下载还是重新录制素材,操作起来都是相当困难的。那么,会声会影视频乱码什么原因,会声会影视频乱码怎么…

C++设计模式之原型模式(Prototype)

[C]22种设计模式的C实现大纲 文章目录 定义别名前言1. 问题2. 解决方案 结构1. 基本实现2. 原型注册表实现 适用场景实现方式优点缺点与其他模式的关系实例 定义 原型是一种创建型设计模式,使你能够复制已有对象,而又无需使代码依赖它们所属的类。 别…

利用fabric绘画矩形和多边形

需求在一张图片上标注矩形和多边形,支持回显; fabric版本:4.6.0; Fabric.js 是一个功能强大且操作简单的 Javascript HTML5 canvas 工具库。 官方文档 参考链接 组件代码drawer.vue createUuid 是为了让每一个图形有自己的id&…

【 Python 全栈开发 - 语法基础篇 - 20 】数据可视化

文章目录 一、数据可视化二、pandas1. 折线图2. 散点图3. 柱状图4. 饼图 三、matplotlib1. 折线图2. 散点图3. 柱状图4. 饼图 四、seaborn1. 安装和导入Seaborn2. 加载数据集3. 绘制散点图4. 绘制直方图5. 绘制核密度图6. 绘制条形图7. 绘制热力图 五、plotly安装plotly创建图表…

chatgpt赋能python:如何重新运行Python程序:完整指南

如何重新运行Python程序:完整指南 Python是最受欢迎的编程语言之一,因为其语法简单易懂,使得编写高效可读性代码更加轻松。但在编程过程中经常会出现需要重新运行程序的情况,本文将为您介绍如何重新运行Python程序。 重新运行Py…

chatgpt赋能python:Python如何降低memory的方法

Python如何降低memory的方法 Python已经成为了世界上最流行的编程语言之一,它在开发web应用、机器学习、数据分析等领域中拥有广泛的应用。然而,由于Python的内存管理机制,可能会导致程序的内存占用过高,影响系统的性能。在本文中…

excel文档翻译软件怎么使用?告诉你怎么翻译整个excel文档

excel是一款电子表格软件,广泛应用于数据分析、统计和管理等领域。然而,当我们需要处理包含其他语言的excel文档时,可能会遇到语言障碍。不用担心,现在有一些方便的软件可以帮助我们轻松翻译excel文档。今天我们就一起来看看excel…

UniApp个人总结:新建页面大汇总

文章目录 往期回顾正文本篇目标环境安装如何新建模板页面页面布局推荐新建模板文件 总结 往期回顾 uniapp 踩坑记录 uni.$on为什么不能修改data里面的数据 uniApp页面通讯大汇总,如何页面之间传值 uniApp 页面通讯统一解决方案 uniapp sqlite 数据库操作封装 un…

一致性模型

首先明确一下分布式的组成定义,为下面打好铺垫 都做到了让系统“表现得像只有一个副本”。它们的不同在于,前一种排序遵循了不同用户的操作的时间先后顺序,而后一种排序没有。实际上,如果我们要求系统满足线性一致性,就…

什么是创新,为何如此难,又能解决啥-非AI撰写

什么项目创新?机器人技术创新?能解决下文中的问题呢? 这是近两个月以来,也许唯一一篇,我自己码字写的博客。 有感于一些课程,比如: 这一类课程最为典型的特点就是课程名称上有“创新”这两个字…

Matlab基础入门

Matlab简介 矩阵实验室(matrix&laboratory) R2022a:2022上半年的版本 R2022b:2022下半年的版本 Matlab界面 命令行窗口 与使用者直接进行交互,相当于一个计算器 >> 11ans 2 >> 5-2ans 3 >&…

再谈如何在python3.10等环境中搞崩wordcloud

如果你能搞崩python中的wordcloud,让它无法运行,基本上python的第三方依赖库的问题就好简单了。我们以搞崩python3.8 为例。 让python3.8运行词语图程序的时候出现truetype fonts 错误!!! 方法如下: pyth…

chatgpt赋能python:Python如何运行两次

Python如何运行两次 Python是一种高级编程语言,非常受欢迎,因为它易于学习,简单易用,开放性强,而且功能强大。Python常用于处理各种任务,包括数据分析、Web应用开发、人工智能、自动化测试等。此外&#x…

噪声参数估计相关

文章目录 噪声参数估计相关1. Estimation Of Signal Dependent Noise Parameters From A Single Image2. Practical Poissonian-Gaussian noise modeling and fitting for single-image raw-data3. Simplified noise model parameter estimation for signal-dependent noise4. …

ipad手写笔哪款好?性价比高的触控笔

在现代人的生活中,电容笔的身影随处可见,随着电容笔的广泛,其品牌和种类也越来越多,更多的人群追求性价比,苹果产品深受大家欢迎,但是大多数人都是被价格劝退,下面整理几款适合iPad用的平替电容…

Flask开发简易网站疑难点梳理

文章目录 整体总结创建项目独立的python环境windows下python独立环境目录结构linux下python独立环境目录结构 大概需要安装的第三方库使用websockt实现python代码与html界面的通讯界面F12中看到提示连接成功后立马连接关闭。 linux下数据库查询异常初次登录web的时候背景图片和…

ERP的需求分析(下)

目录 1、采购管理 2、生产订单模块 3、仓库管理 4、查询与分析

Golang处理内存溢出

背景: 最近系统在压测过程中发现主程序在并发增大后会出现主程序闪退现象,几经波折,认为有可能是内存溢出引起的 正好对 Golang 里分析 dump 这块还没怎么涉及,借此契机研究一下。 前言: 查看社区后,发现…