Hadoop压缩之MapReduce中使用压缩
1.压缩和输入分片
Hadoop中文件是以块的形式存储在各个DataNode节点中,假如有一个文件A要做为输入数据,给MapReduce处理,系统要做的,首先从NameNode中找到文件A存储在哪些DataNode中,然后,在这些DataNode中,找到相应的数据块,作为一个单独的数据分块,作为map任务的输入,这就是mapreduce处理的数据的粗略过程!但是,我们都知道,对于一些大型的数据,压缩是很有用的,不仅能够节省存储空间,而且还能够加快传输速率。把文件压缩后再存入数据节点中,这个很常见。那么压缩的数据作为MapReduce的输入数据处理,这个可以不?
假如现在有一个压缩文件B,存储在16个数据块中,但是,将每个数据块作为单独的输入分片是无法实现工作的,因为无法实现从gzip压缩数据流的任意位置读取数据,所以,让多个map任务多里运行是无法实现的。在这种情况下,MapReduce不会去切分gzip压缩文件,而是由一个map任务去处理所有的数据块。因为它知道输入的是gzip(文件扩展名)且不支持切分。那么这么做,带来的缺点很明显了:首先是牺牲了数据的本地性,一个map处理16个数据块,而其中大多数块并没有存储在执行map任务的节点。其次,map任务少了,作业的粒度就较大,运行的时间可能会更长!
对于大文件来说,不应该使用不支持切分整个文件的压缩格式,否则将失去数据的本地性,进而造成MapReduce应用效率低下!
2.数据本地性
Hadoop中有几样东西比较珍贵,不是存储硬盘,不是cpu,而是内存和带宽!为什么是内存和带宽呢?NameNode中存储的是目录元数据,不懂的可以查看我的博客《Hadoop中的namenode、辅助namenode、jobtracker、datenode等作用》,http://blog.sina.com.cn/s/blog_c09822a40102v9fp.html,而NameNode把这些存放在内存当中,所以,内存的大小也决定着DataNode中存放的数据多少,就算DataNode再多,NameNode的内存上不去,也存储不了多少数据。还有网络带宽,带宽很贵,数据本地化就能够节省网络带宽。因为我们把数据是在本地处理的。处理完后,然后,再把处理后的结果,通过网络传送个reduce所在的节点。而上面的经过gzip压缩的数据,是把数据块全部传送到map所在的节点,就丧失了数据本地化的优势,占用网络带宽。尤其是对于大点的数据!统一时间要占用多少带宽。
3.在MapReduce中使用压缩
如果想对MapReduce作业的输出进行压缩操作,应在作业配置过程中,将mapred.output.compress属性设置为true和mapred.output.compression.codec属性设置为打算使用的压缩codec的类名。
由于map任务的输出需要写到磁盘并通过网络传输到reducer节点,所以如果使用LZO这样的快速压缩方式,是可以获得性能提升的,因为需要传输的数据减少了。
| 属性名称 | 类型 | 默认值 | 描述 |
| mapred.compress.map.out | boolean | false | 对map任务输出进行压缩 |
| mapred.map.output.compression.codec | Class | org.apache.hadoop.io.compress.DefaultCodec | map输出所用的压缩codec |
Hadoop压缩之MapReduce中使用压缩的更多相关文章
- Hadoop框架下MapReduce中的map个数如何控制
控制map个数的核心源码 long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job)); //getFormatMinS ...
- hadoop中MapReduce中压缩的使用及4种压缩格式的特征的比较
在比较四中压缩方法之前,先来点干的,说一下在MapReduce的job中怎么使用压缩. MapReduce的压缩分为map端输出内容的压缩和reduce端输出的压缩,配置很简单,只要在作业的conf中 ...
- Hadoop MapReduce中压缩技术的使用
Compression and Input Splits 当我们使用压缩数据作为MapReduce的输入时,需要确认数据的压缩格式是否支持切片? 假设HDFS中有一个未经压缩的大小为1GB的文 ...
- Hadoop学习笔记—12.MapReduce中的常见算法
一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...
- 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)
转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...
- hadoop学习第四天-Writable和WritableComparable序列化接口的使用&&MapReduce中传递javaBean的简单例子
一. 为什么javaBean要继承Writable和WritableComparable接口? 1. 如果一个javaBean想要作为MapReduce的key或者value,就一定要实现序列化,因为 ...
- Hadoop学习之路(二十三)MapReduce中的shuffle详解
概述 1.MapReduce 中,mapper 阶段处理的数据如何传递给 reducer 阶段,是 MapReduce 框架中 最关键的一个流程,这个流程就叫 Shuffle 2.Shuffle: 数 ...
- 在Spark程序中使用压缩
当大片连续区域进行数据存储并且存储区域中数据重复性高的状况下,数据适合进行压缩.数组或者对象序列化后的数据块可以考虑压缩.所以序列化后的数据可以压缩,使数据紧缩,减少空间开销. 1. Spark对压缩 ...
- Hadoop学习笔记—11.MapReduce中的排序和分组
一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出,在Step1.4也就是第四步中,需要对不同分区中的数据进行排 ...
随机推荐
- MariaDB主从异步复制详解
一 异步复制(Asynchronous replication) 1.MariaDB本身支持单向的.异步的复制.异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时,最重要的是这意味着当应用系 ...
- msyqld 的 The user specified as a definer ('root'@'%') does not exist 问题
msyqld 的 The user specified as a definer ('root'@'%') does not exist 问题 造成问题:搭建网站时显示内容不完整. 跟踪tomcat日 ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- python 打造一个sql注入脚本 (一)
0x00前言: 昨天刚刚看完小迪老师的sql注入篇的第一章 所以有了新的笔记. 0x01笔记: sql注入原理: 网站数据传输中,接受变量传递的值未进行过滤,导致直接带入数据库查询执行的操作. sql ...
- SVN命令解析以及问题解决(update...)
SVN常用指令 1.Repo-browser(浏览版本库) 通过“浏览版本库”可以直接查看服务器上指定目录下的所有目录结构(需要有相关权限),包括特定版本的作者,提交时间等,并且在浏览版本库里面链接了 ...
- redis rdb文件解析
http://www.ttlsa.com/python/redis-rdb-tools-analysis-of-reids-dump-file-and-memory-usage/ redis-rdb- ...
- Android 4 学习(20):ActionBar
参考<Pro Android 4.0> ActionBar 11.0之后,ActionBar在Activity中默认存在,可以在代码中设置其显示与否: ActionBar actionBa ...
- jQuery基本API小结(上)--选择器-DOM操作-动画-Ajax
一.JQuery基础选择器 1.基本选择器(CSS选择器) 2.$()中的()不一定是指定元素,也可能是函数. 3.“*”号选择器,它的功能是获取页面中的全部元素:$(“*”). 由于使用*选择器获取 ...
- Linux 登陆提示文字
/etc/issue是从本地登陆显示的信息 /etc/issue.net是从网络登陆显示的信息 /etc/motd内容由系统管理员确定,常用于通告信息,如计划关机时间的警告等 每次用户登录时,/etc ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测
Lecture 15 Anomaly Detection 异常检测 15.1 异常检测问题的动机 Problem Motivation 异常检测(Anomaly detection)问题是机器学习算法 ...