概述

只要是配置了正确的文件类型和压缩类型(比如Textfile+Gzip、SequenceFile+Snappy等),Hive都可以按预期读取并解析数据,提供SQL功能。

SequenceFile本身的结构已经设计了内容进行压缩。所以对于SequenceFile文件的压缩,并不是先生成SequenceFile文件,再对文件进行压缩。而是生成SequenceFile文件时,对其中的内容字段进行压缩。最终压缩后,对外仍体现为一个SequenceFile。

RCFile、ORCFile、Parquet、Avro对于压缩的处理方式与SequenceFile相同。

文件格式

  1. Textfile
  2. SequenceFile
  3. RCFile
  4. ORCFile
  5. Parquet
  6. Avro

压缩算法的编解码器

序号 压缩格式 算法 多文件 可分割性 工具 工具压缩后扩展名
1 DEFLATE DEFLATE .deflate
2 Gzip DEFLATE gzip .gz
3 bzip2 bzip2 bzip2 .bz2
4 LZO LZO lzop .lzo
5 LZ4 ??? ?? ?? ??? ???
6 Snappy ??? ?? ?? ??? ???
7 ZLIB ??? ?? ?? ??? ???
8 ZIP DEFLATE 是,在文件范围内 zip .zip

TEXTFILE

文本文件,非压缩

1
2
3
4
5
6
7
8

--创建一个表,格式为文本文件:
CREATE EXTERNAL TABLE student_text (id STRING, name STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--导入数据到此表中,将启动MR任务
INSERT OVERWRITE TABLE student_text SELECT * FROM student;

可查看到生成的数据文件的格式为非压缩的文本文件:

hdfs dfs -cat /user/hive/warehouse/student_text/000000_01001810081,cheyo
1001810082,pku
1001810083,rocky
1001810084,stephen
2002820081,sql
2002820082,hello
2002820083,hijj
3001810081,hhhhhhh
3001810082,abbbbbb

文本文件,DEFLATE压缩

 123456789
10
11
12
13
14

--创建一个表,格式为文件文件:
CREATE TABLE student_text_def (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec;
--导入数据:
INSERT OVERWRITE TABLE student_text_def SELECT * FROM student;
--查看数据
SELECT * FROM student_text_def;

查看数据文件,可看到数据文件为多个.deflate文件。

hdfs dfs -ls /user/hive/warehouse/student_text_def/
-rw-r--r--   2015-09-16 12:48 /user/hive/warehouse/student_text_def/000000_0.deflate
-rw-r--r--   2015-09-16 12:48 /user/hive/warehouse/student_text_def/000001_0.deflate
-rw-r--r--   2015-09-16 12:48 /user/hive/warehouse/student_text_def/000002_0.deflate

文本文件,Gzip压缩

 123456789
10
11
12
13
14

--创建一个表,格式为文件文件:
CREATE TABLE student_text_gzip (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
--导入数据:
INSERT OVERWRITE TABLE student_text_gzip SELECT * FROM student;
--查看数据
SELECT * FROM student_text_gzip;

查看数据文件,可看到数据文件为多个.gz文件。解开.gz文件,可以看到明文文本:

hdfs dfs -ls /user/hive/warehouse/student_text_gzip/
-rw-r--r--  2015-09-15 10:03 /user/hive/warehouse/student_text_gzip/000000_0.gz
-rw-r--r--  2015-09-15 10:03 /user/hive/warehouse/student_text_gzip/000001_0.gz
-rw-r--r--  2015-09-15 10:03 /user/hive/warehouse/student_text_gzip/000002_0.gz

文本文件,Bzip2压缩

 123456789
10
11
12
13
14

--创建一个表,格式为文件文件:
CREATE TABLE student_text_bzip2 (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置压缩类型为Bzip2压缩:
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec;
--导入数据
INSERT OVERWRITE TABLE student_text_bzip2 SELECT * FROM student;
--查看数据:
SELECT * FROM student_text_bzip2;

查看数据文件,可看到数据文件为多个.bz2文件。解开.bz2文件,可以看到明文文本:

hdfs dfs -ls /user/hive/warehouse/student_text_bzip2
-rw-r--r--  2015-09-15 10:09 /user/hive/warehouse/student_text_bzip2/000000_0.bz2
-rw-r--r--  2015-09-15 10:09 /user/hive/warehouse/student_text_bzip2/000001_0.bz2
-rw-r--r--  2015-09-15 10:09 /user/hive/warehouse/student_text_bzip2/000002_0.bz2

文本文件,lzo压缩

 123456789
10
11
12
13
14

--创建表
CREATE TABLE student_text_lzo (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置为LZO压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;
--导入数据
INSERT OVERWRITE TABLE student_text_lzo SELECT * FROM student;
--查询数据
SELECT * FROM student_text_lzo;

查看数据文件,可看到数据文件为多个.lzo压缩。解开.lzo文件,可以看到明文文本。

未实测,需要安装lzop库

文本文件,lz4压缩

 123456789
10
11
12

--创建表
CREATE TABLE student_text_lz4 (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置为LZ4压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.Lz4Codec;
--导入数据
INSERT OVERWRITE TABLE student_text_lz4 SELECT * FROM student;

查看数据文件,可看到数据文件为多个.lz4压缩。使用cat查看.lz4文件,可以看到是压缩后的文本。

hdfs dfs -ls /user/hive/warehouse/student_text_lz4
-rw-r--r-- 2015-09-16 12:06 /user/hive/warehouse/student_text_lz4/000000_0.lz4
-rw-r--r-- 2015-09-16 12:06 /user/hive/warehouse/student_text_lz4/000001_0.lz4
-rw-r--r-- 2015-09-16 12:06 /user/hive/warehouse/student_text_lz4/000002_0.lz4

文本文件,Snappy压缩

 123456789
10
11
12
13
14
15
16
17

--创建表
CREATE TABLE student_text_snappy (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置压缩
SET hive.exec.compress.output=true;
SET mapred.compress.map.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;
--导入数据
INSERT OVERWRITE TABLE student_text_snappy SELECT * FROM student;
--查询数据
SELECT * FROM student_text_snappy;

查看数据文件,可看到数据文件为多个.snappy压缩文件。使用cat查看.snappy文件,可以看到是压缩后的文本:

hdfs dfs -ls /user/hive/warehouse/student_text_snappy
Found 3 items
-rw-r--r--   2015-09-15 16:42 /user/hive/warehouse/student_text_snappy/000000_0.snappy
-rw-r--r--   2015-09-15 16:42 /user/hive/warehouse/student_text_snappy/000001_0.snappy
-rw-r--r--   2015-09-15 16:42 /user/hive/warehouse/student_text_snappy/000002_0.snappy

SEQUENCEFILE

Sequence文件,DEFLATE压缩

 123456789
10
11
12
13
14

--创建一个表,格式为文件文件:
CREATE TABLE student_seq_def (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec;
--导入数据:
INSERT OVERWRITE TABLE student_seq_def SELECT * FROM student;
--查看数据
SELECT * FROM student_seq_def;

查看数据文件,是一个密文的文件.

hdfs dfs -ls /user/hive/warehouse/student_seq_def/
-rw-r--r--  /user/hive/warehouse/student_seq_def/000000_0

Sequence文件,Gzip压缩

 123456789
10
11
12
13
14

--创建一个表,格式为文件文件:
CREATE TABLE student_seq_gzip (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
--导入数据:
INSERT OVERWRITE TABLE student_seq_gzip SELECT * FROM student;
--查看数据
SELECT * FROM student_seq_gzip;

查看数据文件,是一个密文的文件,无法通过gzip解压:

hdfs dfs -ls /user/hive/warehouse/student_seq_gzip/
-rw-r--r--  /user/hive/warehouse/student_seq_gzip/000000_0

RCFILE

RCFILE,Gzip压缩

 123456789
10
11
12
13
14

CREATE TABLE student_rcfile_gzip (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS RCFILE;--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
--导入数据:
INSERT OVERWRITE TABLE student_rcfile_gzip SELECT id,name FROM student;
--查看数据
SELECT * FROM student_rcfile_gzip;

ORCFile

ORCFile有自己的参数设置压缩格式,一般不使用上述Hive参数设置压缩参数

参考文档:LanguageManual ORC

ORCFile,ZLIB压缩

 123456789
10
11

--创建表
CREATE TABLE student_orcfile_zlib (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS ORCFILE TBLPROPERTIES ("orc.compress"="ZLIB");--导入数据
INSERT OVERWRITE TABLE student_orcfile_zlib SELECT id,name FROM student;
--查询数据
SELECT * FROM student_orcfile_zlib;

ORCFILE,Snappy压缩

 123456789
10
11

--创建表
CREATE TABLE student_orcfile_snappy2 (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS ORCFILE TBLPROPERTIES ("orc.compress"="SNAPPY");--导入数据
INSERT OVERWRITE TABLE student_orcfile_snappy2 SELECT id,name FROM student;
--查询数据
SELECT * FROM student_orcfile_snappy2;

一般不使用下述方式。下述方式压缩后,结果与上述同类型压缩(SNAPPY)不同。具体原因待进一步研究。

 123456789
10
11
12
13
14
15
16
17

--创建表
CREATE TABLE student_orcfile_snappy (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS ORCFILE;
--设置压缩
SET hive.exec.compress.output=true;
SET mapred.compress.map.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;
--导入数据
INSERT OVERWRITE TABLE student_orcfile_snappy SELECT id,name FROM student;
--查询数据
SELECT * FROM student_orcfile_snappy;

Parquet

Parquet,Snappy压缩

 123456789
10
11
12
13
14
15
16
17

--创建表
CREATE TABLE student_parquet_snappy (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS PARQUET;
--设置压缩
SET hive.exec.compress.output=true;
SET mapred.compress.map.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;
--导入数据
INSERT OVERWRITE TABLE student_parquet_snappy SELECT id,name FROM student;
--查询数据
SELECT * FROM student_parquet_snappy;

Avro

Avro,Snappy压缩

 123456789
10
11
12
13
14
15
16
17

--创建表
CREATE TABLE student_avro_snappy (id STRING, name STRING)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS AVRO;
--设置压缩
SET hive.exec.compress.output=true;
SET mapred.compress.map.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;
--导入数据
INSERT OVERWRITE TABLE student_avro_snappy SELECT id,name FROM student;
--查询数据
SELECT * FROM student_avro_snappy;

参考文档

  1. hive压缩
  2. hadoop mapreduce和hive中使用SequeceFile+lzo格式数据
  3. Hive文件存储格式的测试比较

Hive之——Hive支持的文件格式与压缩算法(1.2.1)相关推荐

  1. Hive表设置支持中文注释、中文表数据导入

    问题 1.创建表的时候,comment说明字段包含中文,表成功创建成功之后,中文说明显示乱 create table student_score( stu_id string comment '学生i ...

  2. 为什么使用Hive?Hive提供了什么?Hive支持哪些用户?

    为什么使用Hive? 为什么使用Hive?那么,在哪里使用Hive呢?在载入了60亿行(经度.维度.时间.数据值.高度)数据集到MySQL后,系统崩溃了,并经历过数据丢失.这可能部分是因为我们最初的策 ...

  3. [Hive基础]-- Hive table 的压缩方式和存储格式

    目录 一.了解 Hadoop 的压缩方式 1.Hadoop 的压缩方式的基本信息 2.Hadoop 压缩方式优缺点对比 二. Hive table的存储格式 1.TEXTFILE 2.Parquet ...

  4. 【hive】Hive常见的存储格式的区别与应用场景

    Hive常见的存储格式的区别与应用场景 一.文件存储格式 行存储和列存储 1.TextFile 2.sequencefile 3.RC 4.orc(工作中常用) 5.parquet 二.四种存储格式分 ...

  5. 大数据时代的技术hive:hive介绍

    转自:http://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3114180.html 我最近研究了hive的相关技术,有点心得,这里和大家分享下. ...

  6. 深入浅出学Hive:Hive高级编程

    目录: 初始Hive Hive安装与配置 Hive内建操作符与函数开发 Hive JDBC Hive参数 Hive高级编程 Hive QL Hive Shell基本操作 Hive优化 Hive体系结构 ...

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

    在Hive中,文件的存储格式主要有:TEXTFILE.SEQUENCEFILE.ORC.PARQUET. 其中,TEXTFILE.SEQUENCEFILE是基于行存储,ORC.PARQUET基于列存储 ...

  8. BigData之Hive:Hive数据管理的简介、下载、案例应用之详细攻略

    BigData之Hive:Hive数据管理的简介.下载.案例应用之详细攻略 目录 Hive数据管理的简介 1.Hive的适用场景--不适合那些需要高实性的应用(不能够在大规模数据集上实现低延迟快速的查 ...

  9. Hive基本操作,DDL操作(创建表,修改表,显示命令),DML操作(Load Insert Select),Hive Join,Hive Shell参数(内置运算符、内置函数)等

    1.  Hive基本操作 1.1DDL操作 1.1.1    创建表 建表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_nam ...

最新文章

  1. 面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
  2. 怎么能把看不清的照片给看清_哪些人会得?应该怎么治?关于白内障的“经典十问”...
  3. NOIP 2017 d2t2 70points
  4. 【网址收藏】win10 VirtualBox安装CentOS 7教程
  5. PHP5.6.6上运行 ecshop 2.7.3常见问题处理
  6. 容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)
  7. yum 不能安装应用,提示There are no enabled repos Run yum repolist all
  8. linux+查看系统环境路径,Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH
  9. 「转」101个著名的心理效应
  10. HTML5期末大作业:学校网站设计——初级中学网站(16页)HTML+CSS+JavaScript 学校网页设计作业 网页设计作业 学生个人设计成品,网页设计作业
  11. HEVC(H.265)与AVC(H.264)的区别与联系
  12. 从零开始学习CANoe 系列文章目录汇总
  13. Google Play Store上线流程
  14. 计算机音乐谱恋人心,天刀曲谱大全_天涯明月刀曲谱恋人心
  15. x86架构和arm架构的cpu简图
  16. (淘宝无限适配)手机端rem布局
  17. Python——打开文件
  18. 笔记本拆c面_拆解C面准备步骤 注意拧下所有螺丝_Alienware 15_笔记本评测-中关村在线...
  19. python蜡烛图预测_【Python量化投资】系列之SVR预测第二天开盘趋势和股价的正负统计分析(附代码)...
  20. 从共享文件夹到本地磁盘

热门文章

  1. office2018自动图文集_操作快狠准!让你相见恨晚的Office快捷键
  2. 2023springboot计算机毕业设计选题推荐、springboot计算机毕业设计题目大全
  3. JS-实现上一题下一题切换功能
  4. 2018个人面试记录
  5. PAT/C++甲级题解——图
  6. 百度图片时看到一张很眼熟,竟然是自己发的,这收录效率!
  7. (ACWing yxc基础算法课笔记) 前缀和
  8. 亚马逊aws 服务器删除_亚马逊aws服务器免费套餐及被扣款怎么办
  9. 字符串中查找IP地址的正则表达式
  10. 搞数仓也得懂几个常用机器学习算法