【大数据之Hive】十九、Hive之文件格式和压缩

news2024/11/26 15:22:45

1 Hadoop压缩概述

Hive中的压缩算法与Hadoop中的压缩算法保持一致,可以把Hive当作Hadoop的一个客户端。
【大数据之Hadoop】十八、MapReduce之压缩

2 Hive文件格式

  Hive表中常用的数据存储格式:text file(行式存储)、orc(列式存储)、parquet(列式存储)、sequence file(序列化文件,行式存储)等。

2.1 Text File

  Text File是Hive默认的文件格式,文本文件的一行内容对应hive表中的一行记录,属于行式存储。

--通过建表语句指定文件格式为文本文件:
create table textfile_table(
    ...
)
stored as textfile;

2.2 ORC

2.2.1 ORC概述

  ORC是列式存储的文件格式,可以提高hive读写数据和处理数据的性能。
在这里插入图片描述
  左边为逻辑表。
  右边第一个为行式存储:取文件的一行数据存储到相邻的位置;
  第二个为列式存储:取文件的一列数据存储到相邻的位置。
(1)行式存储特点:
  查询满足条件的一整行数据的时候,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。列式存储查找一行数据时需要去每个字段中找对应的每个列的值。
(2)列式存储特点:
  因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;
  因为每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

2.2.2 ORC文件基本格式

ORC文件结构:
在这里插入图片描述
  每个Orc文件由Header、Body和Tail三部分组成。

(1)Header内容为ORC,用于表示文件类型。

(2)Body由1个或多个stripe组成,每个stripe一般为HDFS的块大小,每一个stripe包含多条记录,这些记录按照列进行独立存储,每个stripe里有三部分组成,分别是Index Data,Row Data,Stripe Footer:
  (i)Index Data:一个轻量级的index,默认是为各列每隔1W行做一个索引。每个索引会记录第n万行的位置,和最近一万行的最大值和最小值等信息(便于进行根据where的值过滤查询)。
  (ii)Row Data:存储具体的数据,按列进行存储,并对每个列进行编码,分成多个Stream来存储。
  (iii)Stripe Footer:存放的是各个Stream的位置以及各column的编码信息。

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

ORC文件读取流程:
(1)从文件的最后一个字节开始读Postscript的长度;
(2)找到完整的Postscript信息;
(3)根据File Footer的长度定位到File Footer;
(4)读取stripe信息;
(5)根据索引长度得到Index Data;
(6)根据索引信息拿到对应的列;
(7)根据Stripe Footer解析取的数据信息。

语法:

create table table_name(
    ...
)
stored as orc
--不用谢row format delimited fields terminated by '\t'了,只有在文本文件中才需要写
tblproperties (property_name=property_value,...);    --设置参数

ORC文件格式支持的参数:
在这里插入图片描述
  不能用load往orc表中导入数据,因为load是文本文件移动操作。如果使用load导入数据需要先创建一个普通的表,用load往表中导入数据,再用insert…select…从表中读出数据写入orc表中。

2.3 Parquet

Parquet文件结构:
在这里插入图片描述
(1)文件的首尾都是该文件的Magic Code,用于校验它是否是一个Parquet文件都占 4个字节。首尾中间由若干个Row Group和一个Footer(File Meta Data)组成。

(2)每个Row Group(行组)包含多个Column Chunk(列块),每个Column Chunk包含多个Page。
  (i)行组(Row Group):一个行组对应逻辑表中的若干行。
  (ii)列块(Column Chunk):一个行组中的一列保存在一个列块中。
  (iii)页(Page):一个列块的数据会划分为若干个页。

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

Parquet文件读取流程:
(1)跳过文件的最后4个字节找到Footer长度;
(2)根据Footer长度拿到完整的Footer信息;
(3)根据Footer里的每个列块的元数据信息找到列块。

语法:

create tabel table_name(
    ...
)
stored as parquet
tblproperties (property_name=property_value,...);

Parquet文件格式支持的参数:
在这里插入图片描述

3 压缩

  在Hive表和计算过程中使用数据压缩考研有效利用磁盘空间和提高查询性能。

3.1 压缩Hive表数据

  对于不同Hive文件格式存储的表,声明数据压缩方式不同。

3.1.1 Text File

  文件类型为Text File的表数据在进行数据压缩时不需要在建表语句中声明,可以直接向表中导入压缩后的文件,HIve在查询数据时可以自动识别压缩格式进行解压。
  在执行导入数据的SQL前,需要设置参数来保证写入表的数据是被压缩的。

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

3.1.2 ORC

  文件类型为ORC的表数据在进行数据压缩时需要在建表语句中声明压缩格式:

--在建表语句中声明ORC文件的数据压缩:
create table table_name(
    ...
)
stored as orc
tblproperties ("orc.compress"="snappy");

3.1.3 Parquet

  文件类型为Parquet的表数据在进行数据压缩时需要在建表语句中声明压缩格式:

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

3.2 计算过程使用压缩

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;

3.2.2 对单条SQL语句的中间结果进行压缩

  一个SQL数据可能通过MR进行计算,单条SQL语句的中间结果指两个MR之间的临时数据,配置以下参数:

--是否对两个MR之间的临时数据进行压缩
set hive.exec.compress.intermediate=true;

--设置两个MR之间的压缩格式(以snappy为例)
set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

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

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

相关文章

Vue3 ElementPlus写的导航栏

Vue3 ElementPlus Vuex Router写的导航栏,效果如图: 导航条路径那里是自动的。 链接: https://pan.baidu.com/s/1pjqgR9QGbB2ZYIECPwNIoQ?pwdk5ew 提取码: k5ew 复制这段内容后打开百度网盘手机App,操作更方便哦

Android进阶之路 - 背景阴影、阴影背景

不知道你是不是也经常听到这些话:你这个没有阴影效果;你这个阴影太浓了;你这个阴影太粗了;你这个阴影太实了;你这个阴影颜色也不对,你这个阴影… 在正式开发中,临近上线前有个环节叫UI验收&…

Vector - CAPL - 数据库和CAPL_02

DBLookup 动态读取数据库中的信息 //Transmitter 属性以及数据库属性只能通过 DBLookup 动态读取。 //返回数据库中存储的 DLC on message * {int myAttributeValue;myAttributeValue DBLookup(this).MyAttribute;write(this.Transmitter); // compiler errorwrite(DBLookup(…

AR试穿试戴相关SDK或平台

1.火山引擎 链接 咨询过平台收费比较高几十万一年而且还是起步价 2.Geenee 链接 geenee在衣服、裤子、头饰以及鞋子方面可以实现试穿。 3.Wanna 链接 Wanna 试衣、试包、试鞋及手表都可以,我试过鞋子的试穿效果还不错 4.DeepAR …

sqlite维护命令复习学习

前面已经看了一些sqlite命令,例如查看表名,查看表结构等;下面继续看一下; 查看全部表名; 查看单个或全部的表结构; 输出表结构和数据; 使用.output 把查询结果定向到1.txt; 重新定向…

Java设计模式系列--观察者模式写法2:JDK

原文网址:Java设计模式系列--观察者模式写法2:JDK_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例介绍观察者模式的一种写法:JDK。 JDK的观察者模式简介 在 Java 中,java.util.Observable 类和 java.util.Observer 接口定义…

Elsevier: Expert Systems With Applications 经验分享

目录 序时间线投稿返稿录用模板下载链接 序 这是一篇Elsevier旗下Expert Systems With Applications(ESWA)期刊的投稿经验分享。虽然是ESWA,但对于Elsevier旗下的其它期刊也适用,他们都可以用一套模板。 需要注意的是不同期刊会有一些特别的要求&#…

13 直接存储器访问DMA(基于STM32HAL库)

目录 DMA-直接存储器访问控制器 DMA概览 DMA的作用 DMA框图 DMA外设要点概括 DMA功能对比 STMF10x DMA具体内容 DMA主要特性 DMA中断 DMA请求映像 DMA的使用步骤 HAL库中的DMA功能实例 句柄结构体介绍(以DMA为例) 外设初始化结构体介绍 具体…

多元回归预测 | Matlab基于粒子群算法优化深度置信网络(PSO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于基于粒子群算法优化深度置信网络(PSO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型,多变量输入模型 评价

聊聊不同集群的微服务如何通过feign调用

前言 之前业务部门的某项目微服务调用关系如下图 后因业务改造需要,该项目需要将服务A部署到另外一个集群,但服务A仍然需要能调用到服务B,调用关系如下图 之前调用方式是负责服务B的开发团队提供相应的feign客户端包给到服务A开发团队&…

三种Linux内核代码在线阅读工具

记录一下 1 . 可在线阅读uboot,kernel,busybox(rootfs),可搜索字符串,函数跳 https://lxr.missinglinkelectronics.com/ 界面如下: 2. 显示界面跟代码编辑器很像,同样可以函数跳转 https://elixir.boot…

如何让罗技29方向盘像视频中的那样转动起来?

​​​​​​​[vlog]Autoware Carla G29 自动驾驶仿真_哔哩哔哩_bilibili 话接上文,在我之前一篇博客中已经讲解了如何给罗技29方向盘装上力反馈,也就是在拨动方向盘的时候感觉有一个力组织你过度的拨动方向盘,其实它真正的用处是用于实现对…

【Web3】认识区块链

目录 区块链特征 区块链类型 区块链的概念 区块链特征 去中心化:区块链是由一个分布在多个参与者之间的网络组成,没有中央机构或中介控制整个系统。所有参与者共同维护和验证账本的完整性,减少了单点故障和集中式控制的风险。共识机制&…

【HTTPS】采用的加密策略, 什么是中间人攻击? 什么是证书?

文章目录 前言一、认识 HTTPS 协议1, 对称加密2, 非对称加密 二、HTTPS 加密策略1, 只采用对称加密 : 不安全2, 引入非对称加密3, 中间人攻击之偷梁换柱4, 引入证书4.1 什么是证书4.2, 证书如何能解决"中间人攻击" 总结 前言 各位读者好, 我是小陈, 这是我的个人主页…

日历与时钟

目录 公历 黑色星期五 生物韵律 公历 在公历中,当年份为4的整数倍,但不是100的整数倍时,会出现闰年的现象。 y40 mod(y,4) 0 && mod(y,100)||mod(y,400)0 输出当时的年、月、日、时、分、秒 f%6d %6d %6d %6d %6d %9.3f\n cclock …

MySQL学习基础篇(八)---聚合函数

MySQL学习基础篇(八)—聚合函数 聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。 1. 聚合函数介绍 什么是聚合函数:聚合函数作用于一组数据,…

前端实战——尚品汇(网页开发)

/* 基础设置 */ .container {width: 1190px;margin: 0 auto; } /* #region顶部导航条start */ .topbar {height: 30px;background-color: #ececec; } .welcome {height: 30px;line-height: 30px;font-size: 0;color: #666; } .welcome span,.welcome a {font-size: 12px; } .we…

AIGC - Stable Diffusion WebUI 图像生成工具的环境配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131528224 Stable Diffusion WebUI 是一款基于深度学习的图像生成工具,根据用户的输入文本或图像,生成高质量的新图像&…

关于VMware虚拟空间的创建、Linux系统的安装

文章目录 前言一、Windows用户安装VMware软件1.1 下载VMware1.2 正常安装VMware后,该软件是要收费的,但是下面的链接可以让你使用很久 二、Mac用户安装VMware软件2.1 下载macOS版本:VMware Fusion2.2 正常安装VMware后,该软件是要…

「2024」预备研究生mem-形式逻辑强化:推矛盾

一、推矛盾 易错题:重点 重点: 二、课后题 三、每日一练