Hive基础知识(二十):Hive 文件存储形式与文件压缩对比

Hive中text格式和orc格式表的索引性能相关总结 hive中 text格式表和orc格式表的索引总结 text表索引的使用: 建表: create table aa (O_ORDERKEY int, O_CUSTKEY int, O_ORDERSTATUS string, O_TOTALPRICE string, O_ORDERDATE string, O_ORDERPRIORITY string, O_CLERK string, O_SHIPPRIORITY int, O_COMMENT string) row format delimited fie 阅读详情

1. Hadoop 压缩配置

1.1. MR 支持的压缩编码

压缩格式算法文件扩展名是否可切分
DEFLATEDEFLATE.deflate否
GzipDEFLATE.gz否
bzip2bzip2.bz2是
LZOLZO.lzo是
SnappySnappy.snappy否

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

压缩格式对应的编码/解码器
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

压缩性能的比较:

1.2. 压缩参数配置

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

2. 开启 Map 输出阶段压缩(MR 引擎)

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

1)案例实操:

(1)开启 hive 中间传输数据压缩功能

hive (default)> set hive.exec.compress.intermediate=true;

(2)开启 mapreduce 中 map 输出压缩功能

hive (default)> set mapreduce.map.output.compress=true;

(3)设置 mapreduce 中 map 输出数据的压缩方式

hive (default)> set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

(4)执行查询语句

hive (default)> select count(ename) name from emp;

3. 开启 Reduce 输出阶段压缩

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

1)案例实操:

(1)开启 hive 最终输出数据压缩功能

hive (default)>set hive.exec.compress.output=true;

(2)开启 mapreduce 最终输出数据压缩

hive (default)>set mapreduce.output.fileoutputformat.compress=true;

(3)设置 mapreduce 最终数据输出压缩方式

hive (default)> set mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.SnappyCodec;

(4)设置 mapreduce 最终数据输出压缩为块压缩

hive (default)> set mapreduce.output.fileoutputformat.compress.type=BLOCK;

(5)测试一下输出结果是否是压缩文件

hive (default)> insert overwrite local directory '/opt/module/data/distribute-result' select * from emp distribute by deptno sort by empno desc;

4. 文件存储格式

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

4.1. 列式存储和行式存储

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

1)行存储的特点

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

2)列存储的特点

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

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,Stripe Footer:

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 ' '
stored as textfile;

(2)向表中加载数据

hive (default)> load data local inpath '/home/root/hive/log.data' into table log_text;
Loading data to table default.log_text
OK
Time taken: 7.286 seconds

(3)查看表中数据大小

hive (default)>  dfs -du -h /user/hive/warehouse/log_text;
18.1 M  54.4 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 ' '
stored as orc
tblproperties("orc.compress"="NONE"); -- 设置 orc 存储不使用压缩

(2)向表中加载数据

hive (default)> insert into table log_orc select * from log_text; 

(3)查看表中数据大小

hive (default)> 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)向表中加载数据

hive (default)> insert into table log_parquet select * from log_text; 

(3)查看表中数据大小

hive (default)> dfs -du -h /user/hive/warehouse/log_parquet/; 
13.1 M /user/hive/warehouse/log_parquet/000000_0

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

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

(1)TextFile

hive (default)> insert overwrite local directory  '/opt/module/data/log_text' select substring(url,1,4) from log_text; 

(2)ORC

`
hive (default)> insert overwrite local directory  '/opt/module/data/log_orc' select substring(url,1,4) from log_orc; 

(3)Parquet

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

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

Hive之文件格式 Hive支持的存储数的格式主要有:TEXTFILE(默认格式) 、SEQUENCEFILE、RCFILE、ORCFILE、PARQUET。 textfile为默认格式,建表时没有指定文件格式,则使用TEXTFILE,导入数据时会直接把数据文件拷贝到hdfs上不进行处理; sequencefile,rcfile,orcfile格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入sequencefile、rcfile、orcfile表中。 行存储与列 阅读详情

相关推荐

neruolib全脑建模计算框架

neurolib 是一个用python编写的全脑建模计算框架,也是可扩展的、允许轻松实现自定义神经质量模型,能够在介观尺度上表示脑区平均活动。

Rootfyx的博客 1147

hive压缩

Hadoop压缩数据流程 hadoop中有三个阶段可以用到压缩,分别是Map,Shuffle和Reduce,其中Map阶段首先对输入的数据进行压缩,然后在Map的job中进行解压并对数据进行业务处理,将结果写入磁盘的时候进行数据的压缩,Shuffle的过程中将磁盘中压缩的文件内容读取出来,然后传递给Reduce,Reduce中对数据再进行解压并做业务处理,整个过程都计算完毕后再用压缩对输出进行压缩。其数据流程可以用下面的流程表示: 压缩的输入文件->(解压数据)->Maps->压缩输

weixin_38251332的博客 2893

scp 出现Permission denied错误 解决方法

第一种说辞(来源于网络),说是scp涉及root远程登录,默认是没有打开的,只需要把配置文件中的permit打开即可。最后scp的时候发现还不行,只需要将其scp的服务器用户名 修改为root即可。第二种解决方案,将scp 传输的服务器用户名改为root即可。(这是最基本的,一开始我忽视了这个问题,导致一直scp不了)window系统下,向ubuntu操作系统 scp传输文件。

码农研究僧的博客 6727

Hive压缩和存储

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

Faded1573606285的博客 417

Microsoft Bitlocker企业级管理部署方案

BitLocker是Windows 10以及更高版本中内置的磁盘加密工具,是一种可靠的数据保护机制,可以保护计算机上的敏感数据不被未经授权的人访问。BitLocker的工作原理是将整个系统卷或其他数据卷加密的同时,向某个可信软件或硬件模块请求密钥解密数据。BitLocker最大的好处在于其内置于Windows系统,所以用户无需安装其他软件或购买额外的许可证或硬件设备。本文将介绍Microsoft BitLocker企业级管理部署方案,包括:BitLocker部署前的准备工作。

xueyunshengling的博客 2073

【数字孪生与仿真技术】14:数据驱动+机理模型:工业级混合建模实战(附MATLAB完整代码+案例解析)

摘要 本文针对工业建模中机理模型精度不足和数据驱动模型缺乏物理约束的痛点,提出混合建模技术作为解决方案。文章系统阐述了混合建模的3种主流架构(参数校正型、残差补偿型、组件替换型),结合清华大学催化裂化装置的实际案例,分析混合建模的工业应用价值。同时以连续搅拌反应釜(CSTR)为例,提供MATLAB环境下残差补偿型混合模型的完整实现代码,详细展示从机理模型构建到数据驱动补偿的全流程,并给出工程实践中的应对策略,为工业建模提供可落地的技术方案。 关键词 混合建模、机理模型、数据驱动、工业建模、MATLAB

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 622

HIVE数据的压缩与存储格式

压缩技术能够有效减少底层存储系统(HDFS)读写字节数。压缩提高了网络带宽和磁盘空间的效率。在运行MR程序时,I/O操作、网络数据传输、Shuffle和Merge要花大量的时间,尤其是数据规模很大和工作负载密集的情况下,因此,使用数据压缩显得非常重要。鉴于磁盘I/O和网络带宽是Hadoop的宝贵资源,数据压缩对于节省资源、最小化磁盘I/O和网络传输非常有帮助。可以在任意MapReduce阶段启用压缩。不过,尽管压缩与解压操作的CPU开销不高,其性能的提升和资源的节省并非没有代价。...

meng_xin_true的博客 2372

在 SAP ABAP 生态中偏爱面向对象,而不是过程式堆叠

本文探讨了ABAP开发中过程式与面向对象编程的共存现状及优化方向。文章指出,虽然过程式编程在ABAP中仍广泛存在,但随着业务复杂度提升,面向对象编程在可维护性、可测试性和重构便利性方面展现出明显优势。作者建议将过程式代码作为"适配层",仅负责输入输出转换,而将核心业务逻辑封装在类中。文章通过实际案例展示了这种架构如何提高交付效率,并提供了将Function Module转化为"薄包装"的具体实现方案,强调面向对象设计在SAP Gateway和RAP等现代架构中的重要性

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 134

Hive的常见文件存储格式

在hive中,较常见的文件存储格式有:TestFile、SequenceFile、RcFile、ORC、Parquet、AVRO。默认的文件存储格式是TestFile,在建表时若不指定默认为这个格式,那么导入数据时会直接把数据文件拷贝到hdfs上不进行处理。除TestFile外的其他格式的表不能直接从本地文件导入数据,数据要先导入到TestFile格式的表中,然后再从表中用insert导入到...

qq_35420249的博客 2835

Yocto开发讲解系列 - 总目录

Yocto开发讲解系列总纲Yocto开发专栏前言

fulinux的博客 3万+

AI量化学习入门指南:从零开始掌握人工智能投资策略

量化投资:利用数学模型和计算机算法进行投资决策的方法算法交易:自动执行预定义交易规则的系统机器学习:让计算机从数据中学习并改进的技术回测:用历史数据检验交易策略表现的过程特征工程:将原始数据转化为模型可理解的输入过拟合:模型过度适应历史数据,导致未来表现不佳夏普比率:衡量单位风险所获得的超额收益AI量化投资不仅仅是技术的应用,更是一种理性、系统化的投资哲学。它不追求预测市场的每一个拐点,而是通过概率思维和风险管理,在不确定性的市场中寻找统计优势。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1127

Hive文件存储格式(建表stored as 的五种类型)

一、综述 1.建表规范 我们知道hive建表的完成格式如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY(col_name data_typ

清平乐的技术专栏 3万+

如何用 ABAP 以程序方式把指定表项写入 Transport Request

本文探讨了在SAP系统中运输自定义配置表数据时如何确保主表和相关文本表数据同步运输的问题。文章分析了两种实现方案:一是直接操作CTS表结构(E071和E071K)手动添加运输条目,二是使用SOBJ对象类型自动推导依赖关系。重点阐述了第一种方法的实现细节,包括如何正确拼接表键值到TABKEY字段,并提供了示例代码说明如何将ZXA_HEADER主表和ZXA_HEADERT文本表数据同时加入运输请求。文章特别指出在全球化交付场景中,文本表缺失会导致界面显示异常,强调理解底层运输机制对解决此类问题的重要性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

hive的四种文件存储格式

hive分为四种存储格式:         1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 在其中textfile为默认格式,如果在创建hive表不提及,会默认启动textfile格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;与此同时,sequencefile,rcfile,orcfile自己不能直接从本地导入数据,需要将数据转为te...

zg_feig01的博客 8740

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

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hive的常见文件存储格式

在hive中,较常见的文件存储格式有:TestFile、SequenceFile、RcFile、ORC、Parquet、AVRO。默认的文件存储格式是TestFile,在建表时若不指定默认为这个格式,那么导入数据时会直接把数据文件拷贝到hdfs上不进行处理。除TestFile外的其他格式的表不能直接从本地文件导入数据,数据要先导入到TestFile格式的表中,然后再从表中用insert导入到其他格式的表中。 TestFile格式 在建表时无需指定,Hive的默认文件格式,文件存储方式为正常的文本格式。以T

weixin_45216482的博客 3624

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Hive】hive表的文件存储格式

在Hive中,文件的存储格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET。 其中,TEXTFILE、SEQUENCEFILE是基于行存储,ORC、PARQUET基于列存储。 实际生产环境,使用ORC和PARQUET的情况比较多。 1. 行存储和列存储 上图中左边为逻辑表,右上为行存储,右下为列存储。 当查询结果为一整行的时候,行存储效率会高一些;当查询表中某几列时,列存储的效率会更高。 在对数据的压缩方面,列存储比行存储更有优势,所以列存储占用空间相对小一些。 2. TEXT

Just Do IT 3472

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

hive之文件格式与压缩

为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择text file、orc、parquet、sequence file等。ORC(Optimized Row Columnar)file format是Hive 0.11版里引入的一种列式存储的文件格式。ORC文件能够提高Hive读写数据和处理数据的性能。我们文件一般都是一个二维表,行式存储就是以一行数据为一个单位,存储在相邻的位置,列示存储是以一列数据为单位,一个单位内的数据放在相邻的位置。

&volume的博客 1593

Hive文件存储格式和Hive数据压缩小总结

(1)TextFile默认格式,加载速度最快,可以采用Gzip进行压缩,压缩后的文件无法split,无法并行处理了。(2)SequenceFile压缩率最低,查询速度一般,将数据存放到sequenceFile格式的hive表中,这时数据就会压缩存储。三种压缩格式NONE,RECORD,BLOCK。是可分割的文件格式.(3)RCfile压缩率最高,查询速度最快,数据加载最慢。(4)相比TEXTFILE和SEQUENCEFILE。

xinghaoyan的专栏 311

Hive 文件存储格式

方便HDFS进行读取更加高效,HDFS的block块设置为256MB,256MB就会对应一个切片,就对应一个map task线程进行处理,一个线程就可以把一个stripe里面的数据进行读取。这种文件格式可以提供一种高效的方法存储Hive数据,其设计目标是用于克服Hive其他格式的缺陷,运用ORC File可以提高Hive的读、写、及处理数据的性能。: 按行存储,不支持块压缩,默认格式,不支持压缩,磁盘开销大,加载数据的速度最高。(包含键值对的二进制的文件存储格式,支持压缩,可以节省存储空间)

m0_57479841的博客 1296

聊一聊 Hive 文件存储格式

hive文件存储格式

想练武,就得下功夫 1704

HIVE基础-文件存储格式

对 HIVE 文件四种主要存储格式(textfile、sequencefile、orc、parquet)进行详细介绍

小猿天地 2564

Hive 四种文件存储格式

文章目录textFilesequencefileRcfileORCfile总结 Hive的文件存储格式: textFile 默认格式 1)存储方式:行存储 2)缺点:磁盘开销大;数据解析开销大;压缩的text文件,hive无法进行合并和拆分 存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高 sequencefile 1)二进制文件,以键值对<key,value>的形式序列化到文件中 2)存储方式:行存储 3)优点:可分割、压缩,一般选择bl

weixin_44844089的博客 1396

Hadoop压缩形式和Hive存储格式之介绍以及对比分析案例

之前的离线处理,有讲到有个ETL的过程,它实际上是把数据拆开按照指定的格式输出出来。之前的离线处理项目是只有map,没有reduce的,没有reduce就没有shuffle。 ...

liweihope的博客 928

Hive文件存储格式和hive数据压缩

一、存储格式行存储和列存储 二、Hive文件存储格式 三、创建语句和压缩 一、存储格式行存储和列存储 行存储可以理解为一条记录存储一行,通过条件能够查询一整行数据。 列存储,以字段聚集存储,可以理解为相同的字段存储在一起。 二、Hive文件存储格式 TEXTFILE, Hive数据表的默认格式,存储方式:行存储。 可以使用Gzip压缩算法,但压缩后的文件不支持split 在反序列化过...

weixin_30344795的博客 251

Hive的文件存储格式

ORC File,它的全名是Optimized Row Columnar(优化的行列) file,其实就是对RCFile做了一些优化.降低数据存储空间 : orcfile 默认采用 zlib 格式进行压缩.使用压缩的优势是可以最小化所需要的磁盘存储空间,以及减少磁盘和网络io操作;ORC支持三种压缩: ZLIB,SNAPPY,NONE;最后一种就是不压缩,orc默认采用的是ZLIB压缩.

早拾碗吧的博客 727
上一篇: Hive基础知识(十九):Hive 自定义函数
下一篇: Hive基础知识(二一):优化篇-执行计划与Fetch抓取
依晴无旧
博客等级 码龄7年 1683粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值