技术标签: mapreduce Hadoop hadoop 大数据
在MapReduce的Shuffle阶段,可以看到数据通过大量的拷贝,从map阶段输出的数据,都要通过网络拷贝,发送到reduce阶段,这一过程中,涉及到大量的网络IO,如果数据能够进行压缩,那么数据的发送量就会少得多,那么如何配置hadoop的文件压缩呢,以及hadoop当中的文件压缩支持哪些压缩算法呢?
1、hadoop当中支持的压缩算法
文件压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输
前面我们的hadoop的版本经过我们重新编译之后,我们可以看到我们的hadoop已经支持所有的压缩格式了,剩下的问题就是我们该如何选择使用这些压缩格式来对我们的MapReduce程序进行压缩。
我们可以使用 bin/hadoop checknative 来查看我们编译之后的hadoop支持的各种压缩,如果出现openssl为false,那么就在线安装一下依赖包:
bin/hadoop checknative
yum install openssl-devel
[[email protected] hadoop-2.6.0-cdh5.14.2]$ bin/hadoop checknative
20/08/11 17:11:36 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
20/08/11 17:11:36 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /xsluo/install/hadoop-2.6.0-cdh5.14.2/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
snappy: true /lib64/libsnappy.so.1
lz4: true revision:10301
bzip2: true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so
hadoop支持的压缩算法
压缩格式 | 工具 | 算法 | 文件扩展名 | 是否可切分 |
---|---|---|---|---|
DEFLATE | 无 | DEFLATE | .deflate | 否 |
Gzip | gzip | DEFLATE | .gz | 否 |
bzip2 | bzip2 | bzip2 | bz2 | 是 |
LZO | lzop | LZO | .lzo | 否 |
LZ4 | 无 | LZ4 | .lz4 | 否 |
Snappy | 无 | Snappy | .snappy | 否 |
各种压缩算法对应使用的java类
压缩格式 | 对应使用的java类 |
---|---|
DEFLATE | org.apache.hadoop.io.compress.DeFaultCodec |
gzip | org.apache.hadoop.io.compress.GZipCodec |
bzip2 | org.apache.hadoop.io.compress.BZip2Codec |
LZO | com.hadoop.compression.lzo.LzopCodec |
LZ4 | org.apache.hadoop.io.compress.Lz4Codec |
Snappy | org.apache.hadoop.io.compress.SnappyCodec |
常见的压缩速率比较
压缩算法 | 原始文件大小 | 压缩后的文件大小 | 压缩速度 | 解压缩速度 |
---|---|---|---|---|
gzip | 8.3GB | 1.8GB | 17.5MB/s | 58MB/s |
bzip2 | 8.3GB | 1.1GB | 2.4MB/s | 9.5MB/s |
LZO-bset | 8.3GB | 2GB | 4MB/s | 60.6MB/s |
LZO | 8.3GB | 2.9GB | 135 MB/s | 410 MB/s |
snappy | 8.3GB | 1.8GB | 172MB/s | 409MB/s |
在生产环境中常用的压缩算法主要有LZO和snappy等
2、如何开启我们的压缩?
方式一:在代码中进行设置压缩
//设置我们的map阶段的压缩
Configuration configuration = new Configuration();
configuration.set("mapreduce.map.output.compress","true");
configuration.set("mapreduce.map.output.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
//设置我们的reduce阶段的压缩
configuration.set("mapreduce.output.fileoutputformat.compress","true");
configuration.set("mapreduce.output.fileoutputformat.compress.type","RECORD");
configuration.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
方式二:修改mapred-site.xml进行MapReduce压缩
我们可以修改mapred-site.xml配置文件,然后重启集群,以便对所有的mapreduce任务进行压缩
map输出数据进行压缩:
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
reduce输出数据进行压缩:
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.type</name>
<value>RECORD</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property
注意:所有节点都要修改mapred-site.xml,修改完成之后记得重启集群。
3、使用hadoop的snappy压缩来对我们的数据进行压缩
这里我们通过修改代码的方式来实现数据的压缩:
//map阶段输出压缩配置
Configuration configuration = new Configuration();
configuration.set("mapreduce.map.output.compress","true");
configuration.set("mapreduce.map.output.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
//reduce阶段输出压缩配置
configuration.set("mapreduce.output.fileoutputformat.compress","true");
configuration.set("mapreduce.output.fileoutputformat.compress.type","RECORD");
configuration.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
重新打包测试mr程序,
会发现我们的MR运行之后的输出文件都变成了以.snappy的压缩文件。
百度推出飞桨(PaddlePaddle)后,不少开发者开始转向国内的深度学习框架。但是从代码的转移谈何容易,之前的工作重写一遍不太现实,成千上万行代码的手工转换等于是在做...
http://developer.51cto.com/art/201709/551494.htm有一种生物,人称“程序猿” or “攻城狮”工作是高端大气上档次,工资是低调奢华接地气!往往城还没攻下来,头发就先掉下来!世人眼中的当程序员的必经之路是这样的找不到女朋友的原因是这样的事实是否如上所说的那样呢?那就不得而知了,不过深入了解了解那些编程语言之父们头顶的雨林是...
这道题目的类似问题有很多,可是如何解决这种问题,需要一定的抽象技巧题目中说,他们说的话全假,那么就多了几个判断条件。假设A 为 1,B为2,C为3 。其中 x!=1表示x的未婚夫不是Az!=3表示z的未婚夫不是Cx!=3 表示x的未婚夫不是c同时当然不能出现重婚的现象咯因此最简单的穷举法 就可以发挥了代码如下:#inc
广联达笔试的时候接到招银的电话面试,直接跑出去了: 自我介绍 项目介绍 springmvc流程 @Controller的安全问题(没答上来,) TCP三次握手,两次握手会出现什么问题 死锁怎么处理 怎么解决线程安全问题 Redis特性 ...
英文原文:JavaScript Memory Leaks 1. 什么是内存泄露? 内存泄露是指分配给应用的内存不能被重新分配,即使在内存已经不被使用的时候。正常情况下,垃圾回收器在 DOM 元素和 event 处理器不被引用或访问的时候回收它们。但是,IE 的早些版本(IE7和之前)中内存泄露是很容易出现的,因为内存管理器不能正确理解 Javascript 生命周期而且在周
Copyright(C)http://my9801.51.net 本文依照GNU Free Document Lience发布,任何人都可以将本文原封不动的复制、转载,但请务必保留此声明。作者不对本文所导致的任何结果负责。 一、Linux下的常用软件--Emacs 有了上面的基础,你已经可以自由的使用Linux的控制台了。但是,光靠这些,你还不能编辑和修改文件,不能归档和压缩(解压缩)文件,不
条款三十九:明智而审慎地使用private继承private继承的意义在于“be implemented in turns of”,这个与上一条款中说的复合模型的第二层含义是相同的,这也意味着通常我们可以在这两种设计方法之间转换,但书上还是更提倡使用复合来进行类的设计。private继承与public的继承是完全不同的,主要体现在两个地方:其一,public继承在子类中保持父类的访问权...
开始想这个标题时,,很忧郁什么标题将得到更好的叫什么,最后确定的解释,虽然稍0基金会,但是,这个概念是非常。我想出了一个相当的价格值的。,開始。1、MVC的基本开发流程2、webform和MVC的选择3、MVC的内部过程1、MVC的开发流程MVC的出现时微软在2009年左右開始提出的站点开发的新的发展方...
先做一个demo,代码如下public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.v("wanbai"
//传送门: http://dasai.lanqiao.cn/ 暴利方法#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using names
软件下载:Python 3.6.6_64位英文版:【安装前须知:1.安装全程须断开电脑网络,否则安装不成功;2.Python 3.6.6适用于WIN7/8/10系统,亲测可用!Python 3.6.6 WIN10 64位安装步骤:1.根据自己电脑系统的位数选择对应的Python 3.6.6软件安装包到电脑磁盘根目录或英文路径文件夹下,小编这里下载到Python36文件夹下,然后鼠标右击选择【解压到...
1.clear如果我们不希望某个元素因为其他元素浮动的影响而改变位置,可以通过clear属性来清除浮动元素对当前元素所产生影响clear:作用:清除浮动元素对当前元素所产生的影响可选值:left:清除左侧浮动元素对当前元素的影响right:清除右侧浮动元素对当前元素的影响both:清除两侧中最大影响的那侧原理:设置清除浮动以后,浏览器会自动为元素添加一个上外边距,以使其位置不受其他元素的影响2.after伪类解决高度塌陷<!DOCTYPE html><html lan