Hive 压缩和储存

Hive存储格式和压缩算法 Hive文件存储格式和压缩算法介绍 阅读详情

Hive 压缩和储存

一、Hadoop压缩配置

1.1 MR支持的压缩编码

压缩编码

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

编码器

压缩性能的比较

性能比较

http://google.github.io/snappy/
在64位模式的core i7处理器的单核上,Snappy压缩速度约为250MB/秒或更高,并以大约500 MB/秒或更高的速度解压缩。

1.2 压缩参数配置

要在 Hadoop 中启用压缩,可以配置如下参数(mapred-site.xml 文件中):

压缩参数

二、Map输出阶段压缩

开启 map 输出阶段压缩可以减少 job 中 map 和 Reduce task 间数据传输量。具体配置如下:

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

22.593s

三、Reduce输出阶段压缩

当 Hive 将输出写入到表中时,输出内容同样可以进行压缩。属性hive.exec.compress.output控制着这个功能。用户可能需要保持默认设置文件中的默认值false,这样默认的输出就是非压缩的纯文本文件了。用户可以通过在查询语句或执行脚本中设置这个值为 true,来开启输出结果压缩功能。

  1. 开启 hive 最终输出数据压缩功能
set hive.exec.compress.output=true;
  1. 开启 mapreduce 最终输出数据压缩
set mapreduce.output.fileoutputformat.compress=true;
  1. 设置 mapreduce 最终数据输出压缩方式
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
  1. 设置 mapreduce 最终数据输出压缩为块压缩
set mapreduce.output.fileoutputformat.compress.type=BLOCK;
  1. 测试一下输出结果是否是压缩文件
insert overwrite local directory '/root/data/distribute-result0' 
select * from emp 
distribute by deptno 
sort by empno desc;

四、文件储存格式

Hive 支持的存储数据的格式主要有:TEXTFILE 、SEQUENCEFILE、ORC、PARQUET。

4.1 列式储存和行式储存

在这里插入图片描述

如图所示左边为逻辑表,右边第一个为行式存储,第二个为列式存储。

  • 行存储的特点
    查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。

  • 列存储的特点
    因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

TEXTFILE 和 SEQUENCEFILE 的存储格式都是基于行存储的;
ORC 和 PARQUET 是基于列式存储的。

4.2 TextFile 格式

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

4.3 Orc格式

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

如下图所示可以看到每个 Orc 文件由 1 个或多个 stripe 组成,每个 stripe 一般为 HDFS的块大小,每一个 stripe 包含多条记录,这些记录按照列进行独立存储,对应到 Parquet中的 row group 的概念。每个 Stripe 里有三部分组成,分别是 Index Data,Row Data,StripeFooter:

在这里插入图片描述

1)Index Data:一个轻量级的 index,默认是每隔 1W 行做一个索引。这里做的索引应该只是记录某行的各字段在 Row Data 中的 offset。

2)Row Data:存的是具体的数据,先取部分行,然后对这些行按列进行存储。对每个列进行了编码,分成多个 Stream 来存储。

3)Stripe Footer:存的是各个 Stream 的类型,长度等信息。

每个文件有一个 File Footer,这里面存的是每个 Stripe 的行数,每个 Column 的数据类型信息等;每个文件的尾部是一个 PostScript,这里面记录了整个文件的压缩类型以及FileFooter 的长度信息等。在读取文件时,会 seek 到文件尾部读 PostScript,从里面解析到File Footer 长度,再读 FileFooter,从里面解析到各个 Stripe 信息,再读各个 Stripe,即从后往前读。

4.4 Parquet 格式

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

(1)行组(Row Group):每一个行组包含一定的行数,在一个 HDFS 文件中至少存储一个行组,类似于 orc 的 stripe 的概念。

(2)列块(Column Chunk):在一个行组中每一列保存在一个列块中,行组中的所有列连续的存储在这个行组文件中。一个列块中的值都是相同类型的,不同的列块可能使用不同的算法进行压缩。

(3)页(Page):每一个列块划分为多个页,一个页是最小的编码的单位,在同一个列块的不同页可能使用不同的编码方式。

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

在这里插入图片描述

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

4.5 主流文件存储格式对比

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

存储文件的压缩比测试:

  1. 测试数据

    在这里插入图片描述

  2. TextFile

    1. 创建表,存储数据格式为 TextFile

      create table log_text (
      track_time string,
      url string,
      session_id string,
      referer string,
      ip string,
      end_user_id string,
      city_id string
      )
      row format delimited fields terminated by '\t'
      stored as textfile;
      
    2. 向表中加载数据

      load data local inpath '/opt/module/hive/datas/log.data' into table log_text ;
      
    3. 查看表中数据大小

      dfs -du -h /user/hive/warehouse/log_text;
      # 18.13 M /user/hive/warehouse/log_text/log.data
      
  3. ORC

    1. 创建表,存储数据格式为 ORC

      create table log_orc(
      track_time string,
      url string,
      session_id string,
      referer string,
      ip string,
      end_user_id string,
      city_id string
      )
      row format delimited fields terminated by '\t'
      stored as orc
      tblproperties("orc.compress"="NONE"); -- 设置 orc 存储不使用压缩
      
    2. 向表中加载数据

      insert into table log_orc select * from log_text;
      
    3. 查看表中数据大小

      dfs -du -h /user/hive/warehouse/log_orc/ ;
      # 7.7 M /user/hive/warehouse/log_orc/000000_0
      
  4. Parquet

    1. 创建表,存储数据格式为 parquet

      create table log_parquet(
      track_time string,
      url string,
      session_id string,
      referer string,
      ip string,
      end_user_id string,
      city_id string
      )
      row format delimited fields terminated by '\t'
      stored as parquet;
      
    2. 向表中加载数据

      insert into table log_parquet select * from log_text;
      
    3. 查看表中数据大小

      dfs -du -h /user/hive/warehouse/log_parquet/;
      # 13.1 M /user/hive/warehouse/log_parquet/000000_0
      

存储文件的对比总结:ORC > Parquet > textFile

存储文件的查询速度测试:

  1. TextFile

    insert overwrite local directory '/opt/module/data/log_text' select substring(url,1,4) from log_text;
    
  2. ORC

    insert overwrite local directory '/opt/module/data/log_orc' select substring(url,1,4) from log_orc;
    
  3. Parquet

    insert overwrite local directory '/opt/module/data/log_parquet' select substring(url,1,4) from log_parquet;
    

存储文件的查询速度总结:查询速度相近。

五、存储和压缩结合

测试存储和压缩

官网:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC

ORC 存储方式的压缩:

压缩方式

注意:所有关于 ORCFile 的参数都是在 HQL 语句的 TBLPROPERTIES 字段里面出现

  1. 创建一个 ZLIB 压缩的 ORC 存储方式
create table log_orc_zlib(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as orc
tblproperties("orc.compress"="ZLIB");

insert into log_orc_zlib select * from log_text;

dfs -du -h /user/hive/warehouse/log_orc_zlib/ ;
# 2.78 M /user/hive/warehouse/log_orc_none/000000_0
  1. 创建一个 SNAPPY 压缩的 ORC 存储方式
create table log_orc_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as orc
tblproperties("orc.compress"="SNAPPY");

insert into log_orc_snappy select * from log_text;

dfs -du -h /user/hive/warehouse/log_orc_snappy/;
# 3.75 M /user/hive/warehouse/log_orc_snappy/000000_0

ZLIB 比 Snappy 压缩的还小。原因是 ZLIB 采用的是 deflate 压缩算法。比 snappy 压缩的压缩率高。

  1. 创建一个 SNAPPY 压缩的 parquet 存储方式
create table log_parquet_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as parquet
tblproperties("parquet.compression"="SNAPPY");

insert into log_parquet_snappy select * from log_text;

dfs -du -h /user/hive/warehouse/log_parquet_snappy/;
# 6.39 MB /user/hive/warehouse/ log_parquet_snappy /000000_0
  1. 存储方式和压缩总结

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

创建HIVE的rcfile数据压缩表 [Author]: kwu -- 创建HIVE的rcfile数据压缩表 阅读详情

相关推荐

一文搞懂Hive的数据存储与压缩

文章目录行存储与列存储行存储的特点列存储的特点常见的数据格式TextFileSequenceFileRCfileORCfile格式数据访问Parquet测试准备测试数据存储空间大小测试SQL 执行效率总结Hive 压缩Hive中间数据压缩最终输出结果压缩常见的压缩格式Native LibrariesHive中的可用压缩编解码器演示总结 行存储与列存储 当今的数据处理大致可分为两大类,联机事务处理 OLTP(on-line transaction processing)联机分析处理 OLAP(On-Lin.

大数据技术派 540

快速学习-Hive压缩和存储

第 8 章 压缩和存储 8.1 Hadoop 源码编译支持 Snappy 压缩 8.1.1 资源准备 CentOS 联网 配置 CentOS 能连接外网。Linux 虚拟机 ping www.baidu.com 是畅通的 注意:采用 root 角色编译,减少文件夹权限出现问题 jar 包准备(hadoop 源码、JDK8 、maven、protobuf) (1)hadoop-2.7.2-src....

逍遥云恋 637

Proteus仿真实战:ADC0832时序解析与51单片机精准电压采集

本文详细解析了ADC0832模数转换芯片在Proteus仿真环境中的时序控制与51单片机驱动实现。通过实战代码示例和精度优化技巧,帮助开发者掌握电压采集的关键技术,包括时序配置、数据校验和噪声抑制等核心要点,提升嵌入式系统设计的精准度与可靠性。

weixin_29172963的博客 873

hive parquet table 配置使用压缩

创建parquet table : create table mytable(a int,b int) STORED AS PARQUET; 创建带压缩的parquet table: create table mytable(a int,b int) STORED AS PARQUET TBLPROPERTIES('parquet.compression'='SNAPPY');

xiao_jun_0820的专栏 1万+

Ansys Zemax|无焦系统设计中的角度单位优化技巧

本文详细介绍了在Ansys Zemax OpticStudio中进行无焦系统设计的核心技巧。重点阐述了从聚焦思维到角度思维的转换,并演示了如何通过开启‘无焦像空间’模式、构建以波前和光束尺寸为目标的评价函数来优化激光扩束镜等系统。文章还分享了使用IMSF操作数处理混合系统以及常见误区避坑的实用指南,旨在帮助光学设计者高效完成无焦系统的设计与分析。

weixin_29231027的博客 357

MOS 管驱动设计细节,波形分析

一般认为MOSFET是电压驱动的,不需要驱动电流。然而,在MOS的G S两级之间有结电容存在,这个电容会让驱动MOS变的不那么简单。 如果不考虑纹波和EMI等要求的话,MOS管开关速度越快越好,因为开关时间越短,开关损耗越小,而在开关电源中开关损耗占总损耗的很大一部分,因此MOS管驱动电路的好坏直接决定了电源的效率。 对于一个MOS管,如果把GS之间的电压从0拉到管子的开启电压所用的时间越短,那么MOS管开启的速度就会越快。与此类似,如果把MOS管的GS电压从开启电压降到0V的时间越短,那么MOS管关断的

m0_50862404的博客 1万+

Hive数仓中存储格式ORC和Parquet,压缩方式LZO和Snappy

在数仓中,建议大家除了接口表(从其他数据库导入或者是最后要导出到其他数据库的表),其余表的存储格式与压缩格式保持一致。 我们先来说一下目前Hive表主流的存储格式与压缩方式 文件存储格式 从Hive官网得知,Apache Hive支持Apache Hadoop中使用的几种熟悉的文件格式,如TextFile(文本格式),RCFile(行列式文件),SequenceFile(二进制序列化文件),AVRO,ORC(优化的行列式文件)和Parquet格式,而这其中我们目前使用最多的是TextFile,Se..

帅成一匹马 1万+

测试丢包_电信IPRAN承载LTE业务丢包故障处理案例

银川 景旭阳电信IPRAN承载LTE业务丢包故障处理案例一.故障现象某地市IPRAN网络承载LTE基站业务,客户反馈近期丢包严重,基站侧ping侧核心网EPC丢包达到10%左右;且基站数量在10个左右,并分布在同一地区,需要IPRAN网络协助排查;随后查看了IPRAN网络;发现这些业务所在基站的PW-BFD历史告警存在频繁的UP/DOWN告警;综上信息展开故障处理,初步判断由于BFD频繁...

weixin_29740921的博客 1909

使用insert ....directory导出数据注意事项与使用详解

  一个网友问我很简单的查询导出语句,使用insert .....directory导出数据后,无论是在hdfs上还是本地查看的,都是查看显示乱码 insert overwrite directory '/user/finance/hive/warehouse/fdm_sor.db/t_tmp/' select * from t_tmp; #远程查看数据内容 [robot~]$ hadoop...

涤生大数据 2万+

MindIE与vLLM-Ascend性能对决:Qwen3在昇腾910B上的推理效率实测

本文深度对比了昇腾910B平台上两大推理框架MindIE与vLLM-Ascend的性能表现。通过实测Qwen3系列模型,详细分析了二者在单卡、多卡场景下的推理效率、扩展性及生产环境适用性,为AI算力基础设施选型提供关键参考。

weixin_29214335的博客 1176

LIS3DHTR三轴加速度计Arduino驱动与嵌入式集成指南

加速度计是嵌入式系统中实现运动感知、姿态解算和振动分析的核心传感器。其工作原理基于MEMS微机械结构在惯性力作用下的电容变化,经片内ADC转换为数字信号;I²C接口因其硬件资源占用少、布线简洁,成为低功耗物联网节点的主流通信方式。技术价值体现在高分辨率(12位)、多量程(±2g~±16g)与低功耗(待机电流仅2µA)的平衡,支撑电池供电设备长期运行。典型应用场景包括可穿戴设备的姿态识别、工业预测性维护中的振动监测,以及智能硬件的敲击/跌落检测。本文围绕LIS3DHTR芯片及其Grove模块,详解Arduin

weixin_42584758的博客 593

[Hive] INSERT OVERWRITE DIRECTORY要注意的问题

命令,需要确保目录的路径是正确的,并且Hive有权限访问和写入该目录。同时,由于所有的命令都是发送到主HiveServer上去执行的,所以要求此目录必须在主HiveServer节点上。注意数据覆盖、数据格式、分区数据重复以及数据迁移问题。确保在执行该语句之前,仔细检查并处理这些问题,以确保数据的准确性和完整性。语句时,需要注意目标目录的存在性、可访问性和数据重复问题。同时,需要仔细检查并处理这些问题,以确保数据的准确性和完整性。语句时,对目录有一些要求。总之,在使用Hive的。

言之。 1万+

VisionPro 9.0 QuickBuild里用C#脚本调用Halcon 23.11模型,保姆级图文配置流程

本文详细介绍了如何在VisionPro 9.0 QuickBuild环境中使用C#脚本调用Halcon 23.11深度学习模型,提供从环境配置到模型集成的保姆级图文教程。重点解决图像格式转换、许可证配置等工业视觉检测中的常见问题,帮助开发者快速实现高效、稳定的视觉检测流水线部署。

weixin_27027459的博客 432

hive数据格式和压缩格式(orcfile、zlib、snappy、行储存、列储存)

hive数据格式和压缩格式

weixin_46051319的博客 3375

基于Simulink的双PMSM差速驱动转矩同步控制建模示例

本文详细介绍了基于Simulink的双永磁同步电机(PMSM)差速驱动转矩同步控制建模方法。针对AGV/叉车等双电机独立驱动系统的转矩不同步问题,提出主从式+交叉耦合控制策略,在Simulink中实现直线行驶、90°转弯和单轮打滑恢复三种工况的仿真验证。通过动力学建模、参数差异设置、同步误差定义及控制律设计,最终实现同步误差<3%、转弯半径跟踪误差<5%、打滑后100ms内恢复的性能指标。文章特别强调了实际工程中的参数标定、通信同步和故障处理要点,并提供了完整的Simulink建模步骤和工具箱使

xiaoheshang_123的博客 203

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

hive---压缩和存储

修改Hadoop集群具有Snappy压缩方式 查看hadoop支持的压缩方式 hadoop checknative

人的大脑是cpu,而不是硬盘 172

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

hive储存与压缩

​ Hive支持的储存格式主要有:textfile(行列存储)、sequencefile(行列存储)、ORC(列式存储)、parquet(列式存储) 1.1、行式存储和列式存储 ​ 左图为逻辑表,右边第一个为行式存储,第二个为列式存储 **行式存储的特点:**查询满足条件的一整行数据的时候,列存储需要每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻的地方,所以此时行存储查询的速度更快。 select * 效率高 。 **列存储的特点:**因为每个字段的数据聚集存储,在查

fengjian的博客 1306

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Hive压缩方案

Hive压缩方案 目录 Hive压缩方案 一、测试背景 二、测试概述 三、HIVE的几种文件格式对比 3.1、Textfile格式 3.2、sequencefile格式 3.3、rcfile格式 3.4、orcfi...

李指导的博客 1278

Hive(八)—— 压缩和存储

文章目录1. 压缩1.1 Hodoop压缩1.2 Map输出阶段压缩1.3 Reduce输出阶段压缩2. 存储2.1 文件存储格式2.2 主流文件存储格式对比3. 压缩和存储结合 1. 压缩 1.1 Hodoop压缩 详见 Hadoop(十二)—— Hadoop压缩 1.2 Map输出阶段压缩 开启map输出阶段压缩,可以减少job中map和Reduce task间数据传输量。具体配置如下: ...

分享AI工具/AI副业玩法 382

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

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

星光不问赶路人,岁月不负有心人 817

压缩-储存

====压缩=======================================================      Hive常用压缩格式: bzip2, gzip, lzo, snappy ... 注意:hive里要使用某种压缩格式,hadoop必须支持才行,因为hive依赖于Hadoop 查看hadoop是否支持某种压缩的命令: $ bin/hadoop chec

Helpless_pain的博客 569

Hive文件储存格式

Hive 支持多种文件存储格式,不同的格式在等方面各有优劣。

qq_62485695的博客 1160

hive的数据存储与压缩

本文梳理一下hive表的存储与压缩方式

qq_41697157的博客 603

一文搞懂Hive的存储格式与压缩格式

行存储与列存储 当今的数据处理大致可分为两大类,联机事务处理 OLTP(on-line transaction processing)联机分析处理 OLAP(On-Line Analytical Processing)=,OLTP 是传统关系型数据库的主要应用来执行一些基本的、日常的事务处理比如数据库记录的增、删、改、查等等而OLAP则是分布式数据库的主要应用它对实时性要求不高,但处理的数据量大通常应用于复杂的动态报表系统上 所以一般OLTP 都是使用行式存储的,因为实时性要求高,而且有大量的更...

zjjcchina的博客 1276

配置hadoop,hive压缩

hadoop的压缩大体分为三个步骤: 1.map阶段: 压缩文件通过split分片进入到maptask 所以压缩文件必须是支持分片的(text,lzo[index]) 2.shuffle阶段 mapshuffle落地到磁盘时,选用压缩速度快的格式。 3.reduce output阶段 分为两种场景: 一.reduce的输出作为下一个任务的输入,此时压缩文件最好采用支持分片的格式,或者保证outpu...

woods的博客 224
上一篇: Hive 函数
下一篇: python 杂记
努力生活的黄先生
博客等级 码龄7年 38粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力生活的黄先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值