一、数据压缩

1、

数据压缩数据量小*本地磁盘,IO*减少网络IOHadoop作业通常是IO绑定的;
压缩减少了跨网络传输的数据的大小;
通过简单地启用压缩,可以提高总体作业性能;
要压缩的数据必须支持可分割性;

2、什么时候压缩?

1、Use Compressed Map Input
· Mapreduce jobs read input from HDFS
· Compress if input data is large. This will reduce disk read cost.
· Compress with splittable algorithms like Bzip2
· Or use compression with splittable file structures such as Sequence Files, RC Files etc.2、Compress Intermediate Data
·Map output is written to disk(spill)and transferred accross the network
·Always use compression toreduce both disk write,and network transfer load
·Beneficial in performace point of view even if input and output is uncompressed
·Use faster codecs such as Snappy,LZO3、Compress Reducer Output
.Mapreduce output used for both archiving or chaining mapreduce jobs
·Use compression to reduce disk space for archiving
·Compression is also beneficial for chaining jobsespecially with limited disk throughput resource.
·Use compression methods with higher compress ratio to save more disk space

3、Supported Codecs in Hadoop

Zlib→org.apache.hadoop.io.compress.DefaultCodec
Gzip →org.apache.hadoop.io.compress.Gzipcodec
Bzip2→org.apache.hadoop.io.compress.BZip2Codec
Lzo→com.hadoop.compression.1zo.LzoCodec
Lz4→org.apache.hadoop.io.compress.Lz4Codec
Snappy→org.apache.hadoop.io.compress.Snappycodec

4、Compression in MapReduce

#####
Compressed Input Usage:File format is auto recognized with extension.Codec must be defined in core-site.xml.#####
Compress
Intermediate Data
(Map Output):mapreduce.map.output.compress=True; mapreduce.map.output.compress.codec=CodecName;#####
Compress Job Output (Reducer Output):mapreduce.output.fileoutputformat.compress=True; mapreduce.output.fileoutputformat.compress.codec=CodecName;

5、Compression in Hive

#####
Compressed
Input Usage:
Can be defined in table definition
STORED AS INPUTFORMAT
\"com.hadoop.mapred.DeprecatedLzoText Input Format\"#####
Compress Intermediate Data (Map Output):
SET hive. exec. compress. intermediate=True;
SET mapred. map. output. compression. codec=CodecName;
SET mapred. map. output. compression. type=BLOCK/RECORD;
Use faster codecs such as Snappy, Lzo, LZ4
Useful for chained mapreduce jobs with lots of intermediate data such as joins.#####
Compress Job Output (Reducer Output):
SET hive.exec.compress.output=True;
SET mapred.output.compression.codec=CodecName;
SET mapred.output.compression.type=BLOCK/RECORD;

二、snappy

1、简介

在hadoop集群中snappy是一种比较好的压缩工具,相对gzip压缩速度和解压速度有很大的优势,
而且相对节省cpu资源,但压缩率不及gzip。它们各有各的用途。Snappy是用C++开发的压缩和解压缩开发包,旨在提供高速压缩速度和合理的压缩率。Snappy比zlib更快,但文件相对要大20%到100%。
在64位模式的Core i7处理器上,可达每秒250~500兆的压缩速度。Snappy的前身是Zippy。虽然只是一个数据压缩库,它却被Google用于许多内部项目程,其中就包括BigTable,MapReduce和RPC。
Google宣称它在这个库本身及其算法做了数据处理速度上的优化,作为代价,并没有考虑输出大小以及和其他类似工具的兼容性问题。
Snappy特地为64位x86处理器做了优化,在单个Intel Core i7处理器内核上能够达到至少每秒250MB的压缩速率和每秒500MB的解压速率。如果允许损失一些压缩率的话,那么可以达到更高的压缩速度,虽然生成的压缩文件可能会比其他库的要大上20%至100%,但是,
相比其他的压缩库,Snappy却能够在特定的压缩率下拥有惊人的压缩速度,“压缩普通文本文件的速度是其他库的1.5-1.7倍,
HTML能达到2-4倍,但是对于JPEG、PNG以及其他的已压缩的数据,压缩速度不会有明显改善”。

2、使得Snappy类库对Hadoop可用

此处使用的是编译好的库文件;

#这里是编译好的库文件,在压缩包里,先解压缩
[root@hadoop-senior softwares]# mkdir 2.5.0-native-snappy[root@hadoop-senior softwares]# tar zxf 2.5.0-native-snappy.tar.gz -C 2.5.0-native-snappy[root@hadoop-senior softwares]# cd 2.5.0-native-snappy[root@hadoop-senior 2.5.0-native-snappy]# ls
libhadoop.a       libhadoop.so        libhadooputils.a  libhdfs.so        libsnappy.a   libsnappy.so    libsnappy.so.1.2.0
libhadooppipes.a  libhadoop.so.1.0.0  libhdfs.a         libhdfs.so.0.0.0  libsnappy.la  libsnappy.so.1#替换hadoop的安装
[root@hadoop-senior lib]# pwd
/opt/modules/hadoop-2.5.0/lib[root@hadoop-senior lib]# mv native/ 250-native[root@hadoop-senior lib]# mkdir native[root@hadoop-senior lib]# ls
250-native  native  native-bak[root@hadoop-senior lib]# cp /opt/softwares/2.5.0-native-snappy/* ./native/[root@hadoop-senior lib]# ls native
libhadoop.a       libhadoop.so        libhadooputils.a  libhdfs.so        libsnappy.a   libsnappy.so    libsnappy.so.1.2.0
libhadooppipes.a  libhadoop.so.1.0.0  libhdfs.a         libhdfs.so.0.0.0  libsnappy.la  libsnappy.so.1#检查
[root@hadoop-senior hadoop-2.5.0]# bin/hadoop checknative
19/04/25 09:59:51 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
19/04/25 09:59:51 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /opt/modules/hadoop-2.5.0/lib/native/libhadoop.so
zlib:   true /lib64/libz.so.1
snappy: true /opt/modules/hadoop-2.5.0/lib/native/libsnappy.so.1    #snappy已经为true
lz4:    true revision:99
bzip2:  true /lib64/libbz2.so.1

3、mapreduce压缩测试

#创建测试文件
[root@hadoop-senior hadoop-2.5.0]# bin/hdfs dfs -mkdir -p /user/root/mapreduce/wordcount/input[root@hadoop-senior hadoop-2.5.0]# touch /opt/datas/wc.input[root@hadoop-senior hadoop-2.5.0]# vim !$
hadoop hdfs
hadoop hive
hadoop mapreduce
hadoop hue[root@hadoop-senior hadoop-2.5.0]# bin/hdfs dfs -put /opt/datas/wc.input /user/root/mapreduce/wordcount/input
put: `/user/root/mapreduce/wordcount/input/wc.input': File exists[root@hadoop-senior hadoop-2.5.0]# bin/hdfs dfs -ls -R /user/root/mapreduce/wordcount/input
-rw-r--r--   1 root supergroup         12 2019-04-08 15:03 /user/root/mapreduce/wordcount/input/wc.input#先不压缩运行MapReduce
[root@hadoop-senior hadoop-2.5.0]# bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /user/root/mapreduce/wordcount/input /user/root/mapreduce/wordcount/output#压缩运行MapReduce
[root@hadoop-senior hadoop-2.5.0]# bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount -Dmapreduce.map.output.compress=true -Dmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec /user/root/mapreduce/wordcount/input /user/root/mapreduce/wordcount/output2#-Dmapreduce.map.output.compress=true :map输出的值要使用压缩;-D是参数
#-Dmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec :使用snappy压缩;-D是参数
#由于数据量太小,基本上看不出差别

三、hive配置压缩

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

测试:

在hive中运行一个select会执行MapReduce:

hive (default)> select count(*) from emp;

在web页面的具体job中可以看到此作业使用的配置:

转载于:https://www.cnblogs.com/weiyiming007/p/10768896.html

3.2-3.3 Hive中常见的数据压缩相关推荐

  1. hive中常见的日期函数

    常见hive的时间函数1.时间戳转化为日期函数 from_unixtime('1566390082') from_unixtime('1566390082', 'yyyy-MM-dd') from_u ...

  2. hive中的逻辑运算符 案列_Hive内置运算符

    本章介绍Hive的内置运算符.在Hive有四种类型的运算符: 关系运算符 算术运算符 逻辑运算符 复杂运算符 关系运算符 这些操作符被用来比较两个操作数.下表描述了在Hive中可用的关系运算符: 运算 ...

  3. 大数据中常见的端口号 总结汇总大全(最新)

    大数据中常见的端口号 总结大全 如图所示: 常见端口汇总: Hadoop: 50070:HDFS WEB UI端口 8020 : 高可用的HDFS RPC端口 9000 : 非高可用的HDFS RPC ...

  4. 【hive】怎么解决Hive中metaData 字符集中文问题?--详细步骤

    一.首先,一般常见的错误有以及几种以及他们的解决方案: 1.      Hive中创建数据库或者表,如下图示 但是,当你去查看该数据详细信息时,中文出现了乱码,但英文不会,查看数据详情图 为了解决Hi ...

  5. 数据分析中常见的存储方式

    点击上方"大话coding",选择"星标"公众号 重磅干货,第一时间送达 大家好,我是小轩 这两天整理了在数据分析中常见的5种存储格式 内容比较多,只是简要整理 ...

  6. hive中的分区表与视图

    Hive主要由用户接口模块.驱动模型以及元数据存储模块3个模块组成: 用户接口模块   用户接口模块包括CLI.Hive网页接口(Hive Web Interface,HWI).JDBC.ODBC.T ...

  7. hive中的事物操作

    背景 hive中默认是不支持事物的,Hive的常见也一般都是一次写入,频繁读取.加入事物之后,支持update.insert.delete操作 保存的文件格式必须为crc格式file 需要修改配置文件 ...

  8. 轻松玩转hive中各种join之间的关系以及使用

    hive编程是整个数据仓库操作的核心,而各种业务之间的join是hive的核心,所以熟练明白滴掌握hive中的各种join是数据仓库开发工程师必备的技能.    hive中的join只支持等值join ...

  9. Hive 中的复合数据结构简介以及一些函数的用法说明

    目前 hive 支持的复合数据类型有以下几种: map (key1, value1, key2, value2, ...) Creates a map with the given key/value ...

最新文章

  1. cnn 反向传播推导_深度学习中的参数梯度推导(三)下篇
  2. Oracle WebCenter 11g 快速开发指南--翻译(一)
  3. Core Text 入门
  4. [导入]ASP.NET AJAX 说明文档-客户端引用-全局命名空间-JavaScript 基础类型扩展-Array 类型扩展-contains 函数...
  5. 【Python基础】零基础学习Python列表操作
  6. Async Await
  7. 狂雨CMS小说采集规则 附教程
  8. 存储过程实现邮件发送
  9. 洛谷2661 信息传递 三倍经验?
  10. jQuery上传插件uploadify中文文档
  11. matlab直流电机pid调速仿真,直流电机双闭环PID调速系统仿真设计
  12. sci论文发表的重复率要求低于多少
  13. 醋醋SEO基础入门教程_seo入门基础知识
  14. 与你的梦,种植于青山绿水间
  15. 一个程序员的平凡日常
  16. 字节跳动取消大小周;淘宝、支付宝等阿里系App取消开屏广告;Python 3.10 beta 4发布
  17. php 图像边缘检测,科学网—图像处理边缘检测 - 李敏的博文
  18. 网站关键词该如何优化?
  19. 数据分析思维|数据指标异动分析
  20. 软件需求分析-原理、模型与误区

热门文章

  1. MyCat读写分离-笔记(四)
  2. ReactNative v0.55学习笔记
  3. 洛谷 P1678 烦恼的高考志愿
  4. codeforces 547B【单调栈】
  5. Protege5.0.0入门学习
  6. springMVC get请求及其请求地址写法
  7. windows服务,安装、启动、停止,配置,一个批处理文件搞定
  8. ABAP实现粘贴板的操作,复制粘贴
  9. 使用 x3dom 框架及 WebGL 在浏览器上显示 3 维模型
  10. PHP通过Thrift操作Hbase