岳阳网站建设企业,wordpress知识付费插件,淮南公司做网站,公司网站404hive文件格式#xff1a;
概述#xff1a; 为Hive表中的数据选择一个合适的文件格式#xff0c;对提高查询性能的提高是十分有益的。Hive表数据的存储格式#xff0c;可以选择text file、orc、parquet、sequence file等。
文本文件#xff1a;
文本文件就是txt文件
概述 为Hive表中的数据选择一个合适的文件格式对提高查询性能的提高是十分有益的。Hive表数据的存储格式可以选择text file、orc、parquet、sequence file等。
文本文件
文本文件就是txt文件我们默认的文件类型就是txt文件
ORC文件
ORC介绍 ORCOptimized Row Columnarfile format是Hive 0.11版里引入的一种列式存储的文件格式。ORC文件能够提高Hive读写数据和处理数据的性能。
我们文件一般都是一个二维表行式存储就是以一行数据为一个单位存储在相邻的位置列示存储是以一列数据为单位一个单位内的数据放在相邻的位置。
如下图两种方式的比较 在日常使用的时候hive查询出来的大部分是大量列信息少量使用where进行条件查询
orc格式在存储的过程中会在hive表上进行横向切分分割成两次分别进行列式存储
对分割后的数据进行列式存储时会把它存储到orc文件的一个strip条带中剩下的数据存入其他条带中条带中并不止存对应的列还存有一个indexdata--索引存放每列区column的最大值最小值行位置可以减少大量io操作默认10000行记录一个索引。
在文件最后还存有一个StripeFooter存放每个column的编码信息---在存入orc文件的时候并不会按照原表进行存储而是会进行编码存储
在文件开头有一个header:ORC可以用于判断文件类型
文件的底部还有一个FileFooter(存储的有header的长度各Strip的信息strips的起始位置索引长度数据的长度StripsFooter的长度等还存储有各column的统计信息最值hashNull)
ORC文件还有一个PostScript保存这FileFooter的长度文件压缩的参数文件的版本等信息。
还有一个区域用于保存Postscrip的长度文件的最后一个字节 读取ORC文件步骤
一般读取ORC文件是从文件末尾开始先进行读取最后一个字节Postscript的长度再通过得到的长度从倒数第二个字节进行向前推到Postscript的起始位置开始读取从Postscript的数据中的得到File Footer的长度再进行向前推进行访问让后就可以根据File Footer中的内容进行定位。
建表语句
create table orc_table
(column_specs)
stored as orc
tblproperties (property_nameproperty_value, ...); column_speccs是建表语句
tblproperties (property_nameproperty_value, ...)是一些建表的参数 参数 默认值 说明 orc.compress ZLIB 压缩格式可选项NONE、ZLIB,、SNAPPY orc.compress.size 262,144(256kb) 每个压缩块的大小ORC文件是分块压缩的 orc.stripe.size 67,108,864(64MB一般与Hadoop中的块大小一致Hadoop2.x后是128MB) 每个stripe的大小 orc.row.index.stride 10,000 索引步长每隔多少行数据建一条索引 eg:
create table orc_table
( id int,name string
)
stored as orc;
在导入数据的时候不能从文本文件load到orc文件因为load其实是文件的复制是带有格式的在导入的时候是没有关系的但是在读的是时候是不能正确读出的
文本文件数据如何导入到orc格式的表中
我们可以建立一个临时表把文本文件中的数据导入到临时表中通过insertselect的方式进行导入。走计算
Parquet文件
Parquet文件是Hadoop生态中的一个通用的文件格式它也是一个列式存储的文件格式。
Parquet文件也会对表进行横向切分切分后会存入到行组中Row Group,在行组中的数据的每个列都形成一个列块column chunk列块中的数据会再分为页块page。
最后还有FooterFile Meta Data中存储了每个行组Row Group中的每个列快Column Chunk的元数据信息元数据信息包含了该列的数据类型、该列的编码方式、该类的Data Page位置等信息。File Meta Data中的Row Group的数量是与上边Row Group进行一一对应的。
在Parquet文件的开头与结尾都会占用4个字节进行存储 PAR1 (是Parquet的简写版本号)
还会在下边保存Footer的长度
详细如图 Parquet文件基本语法
Create table parquet_table
(column_specs)
stored as parquet
tblproperties (property_nameproperty_value, ...);
支持的参数如下 参数 默认值 说明 parquet.compression uncompressed 压缩格式可选项uncompressedsnappygziplzobrotlilz4 parquet.block.size 134217728 (128mb) 行组大小通常与HDFS块大小保持一致 parquet.page.size 1048576(1m) 页大小
eg:
create table parquet_table
( id int,name string
)
stored as parquet ;压缩
Hive表数据进行压缩 在Hive表中和计算过程中保持数据的压缩对磁盘空间的有效利用和提高查询性能都是十分有益的。
注在Hive中不同文件类型的表声明数据压缩的方式是不同的。
1TextFile
若一张表的文件类型为TextFile若需要对该表中的数据进行压缩多数情况下无需在建表语句做出声明。直接将压缩后的文件导入到该表即可Hive在查询表中数据时可自动识别其压缩格式进行解压。
我们怎么让我们的hive表是压缩的那
1我们使用load语句load的原表就是一个压缩的文件可以直接进行压缩
2使用insert into 语句如果使用这种方式就需要进行设置参数。
需要注意的是在执行往表中导入数据的SQL语句时用户需设置以下参数来保证写入表中的数据是被压缩的。
--SQL语句的最终输出结果是否压缩
set hive.exec.compress.outputtrue;
--输出结果的压缩格式以下示例为snappy
set mapreduce.output.fileoutputformat.compress.codec org.apache.hadoop.io.compress.SnappyCodec;
2ORC
若一张表的文件类型为ORC若需要对该表数据进行压缩需在建表语句中声明压缩格式如下
create table orc_table
(column_specs)
stored as orc
tblproperties (orc.compresssnappy);
3Parquet
若一张表的文件类型为Parquet若需要对该表数据进行压缩需在建表语句中声明压缩格式如下
create table orc_table
(column_specs)
stored as parquet
tblproperties (parquet.compressionsnappy);
计算过程中使用压缩
计算过程就是mapreduce的过程。
1单个MR的中间结果进行压缩
这个就是在map阶段后shuffer的数据进行压缩压缩后可以 降低shuffle阶段的网络IO
参数如下
--开启MapReduce中间数据压缩功能
set mapreduce.map.output.compresstrue;
--设置MapReduce中间数据数据的压缩方式以下示例为snappy
set mapreduce.map.output.compress.codecorg.apache.hadoop.io.compress.SnappyCodec;
2单条SQL语句的中间结果进行压缩
这里指的是有些SQL语句是比较复杂的需要多个MR阶段则会对两个MR之间的临时数据进行压缩
可通过以下参数进行配置
--是否对两个MR之间的临时数据进行压缩
set hive.exec.compress.intermediatetrue;
--压缩格式以下示例为snappy
set hive.intermediate.compression.codec org.apache.hadoop.io.compress.SnappyCodec;