Hive 主流文件存储格式对比

1、存储文件的压缩比测试

1.1 测试数据
https://github.com/liufengji/Compression_Format_Data

log.txt 大小为18.1 M
1.2 TextFile
  • 创建表,存储数据格式为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 ;
  • 向表中加载数据

load data local inpath '/home/hadoop/log.txt' into table log_text ;
  • 查看表的数据量大小

dfs -du -h /user/hive/warehouse/log_text;

+------------------------------------------------+--+
| DFS Output |
+------------------------------------------------+--+
| 18.1 M /user/hive/warehouse/log_text/log.txt |
+------------------------------------------------+--+
1.3 Parquet
  • 创建表,存储数据格式为 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;
  • 向表中加载数据

insert into table log_parquet select * from log_text;
  • 查看表的数据量大小

hdfs dfs -du -h /user/hive/warehouse/log_parquet;

+----------------------------------------------------+--+
| DFS Output |
+----------------------------------------------------+--+
| 13.1 M /user/hive/warehouse/log_parquet/000000_0 |
+----------------------------------------------------+--+
1.4 ORC
  • 创建表,存储数据格式为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 ;
  • 向表中加载数据

insert into table log_orc select * from log_text ;
  • 查看表的数据量大小

hdfs dfs -du -h /user/hive/warehouse/log_orc;
+-----------------------------------------------+--+
| DFS Output |
+-----------------------------------------------+--+
| 2.8 M /user/hive/warehouse/log_orc/000000_0 |
+-----------------------------------------------+--+
1.5 存储文件的压缩比总结
ORC >  Parquet >  textFile

2、存储文件的查询速度测试

2.1 TextFile
select count(*) from log_text;
+---------+--+
| _c0 |
+---------+--+
| 100000 |
+---------+--+
1 row selected (16.99 seconds)
2.2 Parquet
select count(*) from log_parquet;
+---------+--+
| _c0 |
+---------+--+
| 100000 |
+---------+--+
1 row selected (17.994 seconds)
2.3 ORC
select count(*) from log_orc;
+---------+--+
| _c0 |
+---------+--+
| 100000 |
+---------+--+
1 row selected (15.943 seconds)
2.4 存储文件的查询速度总结
ORC > TextFile > Parquet

3、存储和压缩结合

3.1 创建一个非压缩的的ORC存储方式表
  • 1、创建一个非压缩的的ORC表

create table log_orc_none (
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") ;
  • 2、加载数据

insert into table log_orc_none select * from log_text ;
  • 3、查看表的数据量大小

hdfs dfs -du -h /user/hive/warehouse/log_orc_none;
+----------------------------------------------------+--+
| DFS Output |
+----------------------------------------------------+--+
| 7.7 M /user/hive/warehouse/log_orc_none/000000_0 |
+----------------------------------------------------+--+
3.2 创建一个snappy压缩的ORC存储方式表
  • 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") ;
  • 2、加载数据

insert into table log_orc_snappy select * from log_text ;
  • 3、查看表的数据量大小

hdfs dfs -du -h /user/hive/warehouse/log_orc_snappy;
+------------------------------------------------------+--+
| DFS Output |
+------------------------------------------------------+--+
| 3.8 M /user/hive/warehouse/log_orc_snappy/000000_0 |
+------------------------------------------------------+--+
3.3 创建一个ZLIB压缩的ORC存储方式表
  • 不指定压缩格式的就是默认的采用ZLIB压缩

    • 可以参考上面创建的 log_orc 表

  • 查看表的数据量大小

hdfs dfs -du -h /user/hive/warehouse/log_orc;
+-----------------------------------------------+--+
| DFS Output |
+-----------------------------------------------+--+
| 2.8 M /user/hive/warehouse/log_orc/000000_0 |
+-----------------------------------------------+--+
3.4 存储方式和压缩总结
  • orc 默认的压缩方式ZLIB比Snappy压缩的还小。

  • 在实际的项目开发当中,hive表的数据存储方式一般选择:orc或parquet

  • 由于snappy的压缩和解压缩 效率都比较高,压缩方式一般选择snappy

hive基础知识五的更多相关文章

  1. 《Programming Hive》读书笔记(两)Hive基础知识

    <Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...

  2. Python基础知识(五)------字典

    Python基础知识(四)------字典 字典 一丶什么是字典 ​ dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔 ​ 键: 必须是可哈希,(不可变的数据类型 ...

  3. Hive基础知识梳理

    Hive简介 Hive是什么 Hive是构建在Hadoop之上的数据仓库平台. Hive是一个SQL解析引擎,将SQL转译成MapReduce程序并在Hadoop上运行. Hive是HDFS的一个文件 ...

  4. Android学习之基础知识五—创建自定义控件

    下面是控件和布局的继承关系: 从上面我们看到: 1.所有控件都是直接或间接继承View,所有的布局都是直接或间接继承ViewGroup 2.View是Android中最基本的UI组件,各种组件其实就是 ...

  5. hive基础知识四

    1. hive表的数据压缩 1.1 数据的压缩说明 压缩模式评价 可使用以下三种标准对压缩方式进行评价 1.压缩比:压缩比越高,压缩后文件越小,所以压缩比越高越好 2.压缩时间:越快越好 3.已经压缩 ...

  6. python基础知识五

    数据结构基本上就是---它们可以处理一些数据的结构.或者说,它们是用来存储一组相关数据的. python中有三种内建的数据结构---列表.元祖和字典. 我们将会学习如何使用它们,以及它们如何使编程变得 ...

  7. Hive基础知识

    一.产生背景 1.MapReudce编程繁琐,需要编写大量的代码 2.HDFS中存放的都是文件,在HDFS中没有Scheme的概念,无法用SQL进行快速的查询. 二.Hive的概念 Hive是基于Ha ...

  8. Android学习之基础知识五—编写聊天界面

    第一步:在app/build.grandle添加RecyclerView依赖库 第二步:在activity_main.xml文件中编写主界面:聊天.发送框.发送按钮三个部分 第三步:编写Message ...

  9. Android学习之基础知识五—RecyclerView(滚动控件)

    RecyclerView可以说是增强版的ListView,不仅具有ListVIew的效果,还弥补许多ListView的不足. 一.RecyclerView的基本用法 与百分比布局类似,Recycler ...

随机推荐

  1. 哪个版本的gcc才支持c11

    而知,低版本的gcc不支持c11. (而我此处的eglibc 2.17,和那人的glibc-2.16.0,都是需要支持c11的gcc的) 所以此处想要去搞清楚,什么版本的,哪个版本的,gcc,才支持c ...

  2. GNU Makefile中的条件控制结构

    在常见的编程语言中,使用条件控制结构诸如if ... else if ... else...是很寻常的事情,那么在GNU Makefile中如何使用呢? ifeq ifneq 例如:foo.sh #! ...

  3. 用友 U9 常用的东西

    系统资源 数据字典 UI组件 UI参照组件 BE组件 BP组件 SV组件

  4. saltstack的简单搭建

    环境; centos 7     192.168.10.10    master centos 7     192.168.10.129  minion 1.为了方便关闭防火墙 [root@local ...

  5. JavaScript之二十三种设计模式

    23种JavaScript设计模式   原文链接:https://boostlog.io/@sonuton/23-javascript-design-patterns-5adb006847018500 ...

  6. Width Height -- (1)

    Width和Height应该是我们学习CSS时,最先接触到的属性了,一宽一高. 我们知道页面当中的标签分为块级元素和行内元素,它们最大的区别就在于,块级元素可以设置宽高,行内元素不能设置宽高. 举例说 ...

  7. Angular4 innerHtml呈现富文本内容样式

    import { Pipe, PipeTransform } from "@angular/core"; import { DomSanitizer } from '@angula ...

  8. uni-app 无痛刷新 token 方法

    为了给用户一个流畅的体验, token 过期后需要重新请求新的 token 替换过期的 token 前端在请求接口时,和后端定义好了,如果状态码为 401 ,则表明 token 过期,需要前端请求新的 ...

  9. linux防火墙和SELinux

    1. 关闭防火墙 永久性生效 开启:chkconfig iptables on 关闭:chkconfig iptables off 即时生效 开启:service iptables start 关闭: ...

  10. JavaWeb 分层设计、MVC

    M:Model,JavaBean. V:View,JSP. C:Controller,Servlet. Servlet: 接受用户请求,把请求参数封装为一个JavaBean,调用service来处理业 ...