Hive ---- 文件格式和压缩

news2025/1/31 11:15:59

Hive ---- 文件格式和压缩

  • 1. Hadoop压缩概述
  • 2. Hive文件格式
    • 1. Text File
    • 2. ORC
    • 3. Parquet
    • 3. 压缩
    • 1. Hive表数据进行压缩
    • 2. 计算过程中使用压缩

1. Hadoop压缩概述

在这里插入图片描述

为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器,如下表所示:

Hadoop查看支持压缩的方式hadoop checknative。

Hadoop在driver端设置压缩。

在这里插入图片描述

压缩性能的比较:

在这里插入图片描述

2. Hive文件格式

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

1. Text File

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

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

create table textfile_table
(column_specs)
stored as textfile;

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由1个或多个stripe组成,每个stripe一般为HDFS的块大小,每一个stripe包含多条记录,这些记录按照列进行独立存储,每个stripe里有三部分组成,分别是Index Data,Row Data,Stripe Footer。

Index Data:一个轻量级的index,默认是为各列每隔1W行做一个索引。每个索引会记录第n万行的位置,和最近一万行的最大值和最小值等信息。
Row Data:存的是具体的数据,按列进行存储,并对每个列进行编码,分成多个Stream来存储。

Stripe Footer:存放的是各个Stream的位置以及各column的编码信息。
Tail由File Footer和PostScript组成。File Footer中保存了各Stripe的其实位置、索引长度、数据长度等信息,各Column的统计信息等;PostScript记录了整个文件的压缩类型以及File Footer的长度信息等。

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

3)建表语句

create table orc_table
(column_specs)
stored as orc
tblproperties (property_name=property_value, ...);

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

在这里插入图片描述

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位置等信息。

3)建表语句

Create table parquet_table
(column_specs)
stored as parquet
tblproperties (property_name=property_value, ...);

支持的参数如下:

在这里插入图片描述

3. 压缩

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

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.compress"="snappy");

3)Parquet

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

create table orc_table
(column_specs)
stored as parquet
tblproperties ("parquet.compression"="snappy");

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;
--压缩格式(以下示例为snappy)
set hive.intermediate.compression.codec= org.apache.hadoop.io.compress.SnappyCodec;

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

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

相关文章

CodeForces..李华和迷宫.[简单].[找规律]

题目描述: 题目解读: 存在矩阵迷宫nm,(r,c)表示从顶部开始的第r行和左起第c列。 如果两单元格共享一个边,则是相邻的。路径是相邻空单元格的序列。 每个单元格初始状态都为空。对于从&#x…

代码随想录额外题目——图论部分

记录一下代码随想录中额外题目的图论部分 841.钥匙和房间 有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。 当你进入一个…

山海大模型亮相,云知声交出AGI第一份答卷

有人说,AI大模型是少数巨头才能玩得转的游戏。 截至目前,认同此观点的人不在少数。自从ChatGPT去年迅速火遍全球之后,忽如一夜春风来,AI大模型遍地开。Google、Amazon、阿里、百度等巨头们纷纷加入AI大模型的“军备竞赛”&#x…

【数据分享】1929-2022年全球站点的逐日平均气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…

大数据分析案例-基于决策树算法构建世界杯比赛预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

EMC VNX Unified Storage 关机顺序方法

EMC Unfied的VNX存储系统要比单纯的Block系统复杂很多,相当于是两套存储系统,不管在物理硬件上还是逻辑的软件OS上,都复杂很多很多。 客户经常遇到由于机房停电或者机房搬迁等情况,需要对存储系统做关机下电甚至物理搬迁的动作&a…

FPGA基于AXI 1G/2.5G Ethernet Subsystem实现UDP通信DMA传输 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统UDP网络通信方案本方案详细设计说明DMA和BRAMAXIS-FIFOUDP模块设计UDP模块FIFOAXI 1G/2.5G Ethernet Subsystem:输出 4、vivado工程详解5、上板调试验证并演示注意事项 6、福利:工程代码的获取 1、…

【simple-cache】一款只用一个注解就实现缓存的框架-我们终于迎来了SpringBoot版本

上次我们讲了【simple-cache】的使用: 【simple-cache】我开发了一款只要一个注解就可以轻松实现缓存的框架 这次主要更新的内容为: 添加springboot项目框架中去除了redisconfig类,避免了redis的单机和集群问题用户可以自定义使用自己项目中…

Python之字符串(str)基础知识点

strip() 删除指定字符 当token为空时,默认删除空白符(含’\n’,‘\r’,‘\t’,’ ),当非空时,根据指定的token进行删除。 字符的删除又可分为以下几种情况: string.strip(token):删除string字符串中开头(left)、结尾处(right)的…

【操作系统】02.进程管理

多道程序系统 多道就是将多个程序同时装入内存,使之并发运行。操作系统也是基于多道产生的,提高了资源利用率和系统吞吐量。 进程 定义 进程是程序的一次执行 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位 在引入线…

会流程图却不会UML活动图?活动图深度剖析,就怕你学不会!

1. UML活动图是啥? 也许很多人都不怎么了解活动图,但是却对流程图很熟悉,你暂且可以简单的把活动图理解为UML里的流程图,用来描述系统的行为特征。不过UML活动图对比于流程图来说也存在不少差异,本文将在第三章节讲解活…

解决 MobaXterm X11 server 打开 wsl2 linux 子系统 rviz 可视化窗口卡顿问题

1、问题 环境: MobaXtermwsl2 Ubuntu-18.04ROS1Intel 核显 一直使用 MobaXterm 这个远程软件 ssh 链接 linux 服务器,因为它集成了 X11 server,即可以显示一些 linux 下有图形化界面的程序,如 ROS 的 rviz 等。 但是 MobaXterm…

宝塔面板一键部署Z-Blog博客 - 内网穿透实现公网访问

文章目录 1.前言2.网站搭建2.1. 网页下载和安装2.2.网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语 转发自cpolar极点云的…

一步一步的实现使用 Tensorflow Hub 进行图像分割

在本文中,我们将学习如何使用 TensorFlow Hub中提供的预训练模型执行语义图像分割。TensorFlow Hub 是一个库和平台,旨在共享、发现和重用预训练的机器学习模型。TensorFlow Hub 的主要目标是简化重用现有模型的过程,从而促进协作、减少冗余工…

[比赛简介]ICR - Identifying Age-Related Conditions

比赛链接:https://www.kaggle.com/competitions/icr-identify-age-related-conditions 比赛简介 本次比赛的目标是预测一个人是否患有三种疾病中的任何一种。您被要求预测该人是否患有三种疾病中的任何一种或多种(1 类),或者三种…

第14届蓝桥杯Scratch选拔赛(STEMA) 真题集锦

一、选择题 第 1题单选题 运行以下程序 (小象仅有两个造型),小象的造型是哪个? () 答案 A 解析 本题正确答案是A,考察的知识点是角色造型,在Scratch中,切换造型有两个指令,分别是“换成xx造型“和“下一个造型”,其中前者将角色切换为指定造型,而后者则从当前造型切换…

面向小白的最全Python数据分析指南,超全的!

因工作需求经常会面试一些数据分析师,一些 coding 能力很强的小伙伴,当被问及数据分析方法论时一脸懵逼的,或者理所当然的认为就是写代码啊,在文章开头先来解释一下数据分析。 数据分析是通过明确分析目的,梳理并确定…

虎牙在全球 DNS 秒级生效上的实践

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程,博主也曾写过优秀论文,查重率极低,在这方面…

六级备考18天|CET-6|写作第一讲|现象解释|10:00~10:45

目录 1. 议论文类型 现象解释 what,why,importance 观点选择 whether,choice,option 问题解决 how to,measures 图片图表 image,cartoon,diagram,chart 2. 基本题型 议论文、图表、谚语 3. 模版构成/段落结构划分 三个段落:10-11句 背景主题句过渡句 …

电加热道岔融雪系统设备

设备构成 融雪设备由道岔融雪远程控制中心工作站(以下简称工作站)、道岔融雪车站控制终端(以下简称控制终端)、道岔融雪控制柜(以下简称控制柜)、钢轨温度传感器、电加热元件、道岔融雪隔离变压器(以下简称隔离变压器)等组成。 01集中供电方式 02分散供电方式 设备型号及含义…