Hadoop解析--MapReduce
从本篇博客開始咱们一起来具体了解Hadoop的每一个部分。我们在上篇博客中介绍了HDFS,MapReduce,MapReduce为了更有效率事实上是建立在HDFS之上的。有了分布式的文件系统,我们就能在这个系统之上更有效率地进行分布式的计算。我们看看它是咱么实现更优秀的分布式计算。
优势
第一。限制大小
由于HDFS对本地的文件大小做了限制,这样我们本地一个任务处理的量是有限的。尽管我们能够改变这个值。可是也为更好的运行任务打下了坚实的基础,分片的处理方式。不不过分开。还有限制。这种思想使我们欠缺的,分开不过攻克了问你。而限制,是在优化解决方式。
第二。备份
HDFS对全部的文件,都会进行备份,这样就会降低非常多麻烦。我们以往对文件的备份还原一直是个头疼的问题。尤其是数据量上来之后。这件事情变得越来越不可控,而HDFS为计算数据做了备份。这样我们的失误率就会下降,在一台机器文件毁坏的情况下。不影响我们的计算,这就降低了查询日志的时间(相对传统数据库的备份策略)
第三。本地计算
MapReduce中,全部的计算,都是在本地完毕,及时有计算须要外来数据。也是集合好后完毕。这样保证了我们最高效的带宽利用。使我们对数据的处理能力随着集群数目的增大而线性增大。
第四,预处理
在计算的过程中,假设我们对数据的处理结果每次都要控制机进行汇总,和我们能够对计算出的数据,进行预处理,当然是预处理的效果好些,这样相当于减轻了控制机的压力。这种设计在前台js里也有涉及,我们通过js让客户机运行部分代码,减轻我们server的压力,这种效果,自然是比較优秀的!
第五,心跳
在MapReduce过程中。心跳对我们的帮助也非常大,它帮助我们维护计算的可靠性,帮助我们屏蔽一部分因机器故障造成的计算失败,相当于心跳是我们计算过程中主要的保证!
原理
那么mapreduce是怎么做的呢。我们看看这幅原理图:
再看看一些细节上的图,帮我们这里了解下详细是怎么执行的:
源代码
有了前面的认识。我们通过代码看看,我们要秉着一个原则,就是这是简单的分治法的应用。所以这一切都不复杂,map就是分治法的分。reduce就是分治法的治,将大问题打散成小问题,最后整合小问题的结果:
map:
public static class Map extends MapReduceBase implements
Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
output.collect(word, one);
}
}
}
reduce:
public static class Reduce extends MapReduceBase implements
Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
output.collect(key, new IntWritable(sum));
}
}
任务运行的方法:
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(WordCount.class);
conf.setJobName("wordcount");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
任务方法解析:
首先解说一下 Job 的 初始化过程 。
main 函数调用 Jobconf 类来对 MapReduce Job 进行初始化,然后调用 setJobName() 方法命名这个 Job 。
对Job进行合理的命名有助于 更快 地找到Job,以便在JobTracker和Tasktracker的页面中对其进行 监视 。
JobConf conf = new JobConf(WordCount. class ); conf.setJobName("wordcount" );
接着设置Job输出结果<key,value>的中key和value数据类型。由于结果是<单词,个数>。所以key设置为"Text"类型,相当于Java中String类型。
Value设置为"IntWritable"。相当于Java中的int类型。
conf.setOutputKeyClass(Text.class );
conf.setOutputValueClass(IntWritable.class );
然后设置Job处理的Map(拆分)、Combiner(中间结果合并)以及Reduce(合并)的相关处理类。这里用Reduce类来进行Map产生的中间结果合并。避免给网络传输数据产生压力。
conf.setMapperClass(Map.class );
conf.setCombinerClass(Reduce.class );
conf.setReducerClass(Reduce.class );
接着就是调用setInputPath()和setOutputPath()设置输入输出路径。
conf.setInputFormat(TextInputFormat.class );
conf.setOutputFormat(TextOutputFormat.class );
总结:
不论什么技术都是一种思想的体现,而这个世界。我们最主要的一个算法就是分治法。这是我们拿在手里的一本百科全书,差点儿能够解决我们80%的问题。而性能的问题尤其如此,我们经过了几百万年的演变,我们成为了地球上的强大智慧生物,我们本身就具有几百万年延续自己生命的强大竞争力。及我们几千年文明的积淀。我们如今遇到的问题,前人用文字书写在书上,我们一定能够找到。或者我们如今的生活,这个社会,也一定有这个问题的缩影。
Hadoop解析--MapReduce的更多相关文章
- 从Hadoop骨架MapReduce在海量数据处理模式(包括淘宝技术架构)
从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇.而神奇的东西常能勾 ...
- Hadoop之MapReduce学习笔记(二)
主要内容: mapreduce编程模型再解释: ob提交方式: windows->yarn windows->local : linux->local linux->yarn: ...
- hadoop之mapreduce详解(进阶篇)
上篇文章hadoop之mapreduce详解(基础篇)我们了解了mapreduce的执行过程和shuffle过程,本篇文章主要从mapreduce的组件和输入输出方面进行阐述. 一.mapreduce ...
- Hadoop 新 MapReduce 框架 Yarn 详解
Hadoop 新 MapReduce 框架 Yarn 详解: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ Ap ...
- 用PHP编写Hadoop的MapReduce程序
用PHP编写Hadoop的MapReduce程序 Hadoop流 虽然Hadoop是用Java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编 ...
- Hadoop之MapReduce程序应用三
摘要:MapReduce程序进行数据去重. 关键词:MapReduce 数据去重 数据源:人工构造日志数据集log-file1.txt和log-file2.txt. log-file1.txt内容 ...
- 对于Hadoop的MapReduce编程makefile
根据近期需要hadoop的MapReduce程序集成到一个大的应用C/C++书面框架.在需求make当自己主动MapReduce编译和打包的应用. 在这里,一个简单的WordCount1一个例子详细的 ...
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
- Hadoop基础-MapReduce的常用文件格式介绍
Hadoop基础-MapReduce的常用文件格式介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MR文件格式-SequenceFile 1>.生成SequenceF ...
随机推荐
- Auto property synthesis will not synthesize property 'delegate'; it will be implemented by its super
今天在XCode6.3上面重写TabBar的时候,自己定义tabBar的代理遇到的一个问题 在重写tabBar的代理的时候遇到了一个警告. 解决方法: 在.m文件里 警告消失
- SharePoint 2013 开启訪问请求
1.通常,我们进入SharePoint 2013网站,假设没权限会提示该网站未被共享,而没有切换账号或者申请訪问,实在是非常流氓:事实上,SharePoint为我们提供了訪问请求页面.可是可能须要手动 ...
- Spring容器装饰者模式应用之实现业务类与服务类自由组合的解决方式
在不论什么一个项目中都不可或缺的存在两种bean,一种是实现系统核心功能的bean,我们称之为业务类,第二种是与系统核心业务无关但同一时候又提供十分重要服务bean,我们称之为服务类.业务类的bean ...
- 刚接触Joomla,写一下瞎折腾的初感受~
我这几天一直在苦苦寻找一款能够长期投靠的CMS产品,要求的是 1)必须支持命名空间 2)必须OOP + MVC分层 3)丰富分文档和使用群体,至少是出名的.免得哪一天他们解散了 4)-- 一開始我把目 ...
- SVN各种异常解决整理
错误1:工作副本已锁定 由于周末公司server停机维护,今天在用SVN提交业务时,直接报错: 同一时候给了解决的方法:请运行清理命令 直接返回上级文件夹单击右键.运行清除命令后,再次提交! OK! ...
- java 基本数据类型及自己主动类型提升
基本数据类型:8种 1.整型: byte 1个字节 8位 -128到127 short 2个字节 16位 -2^15到(2^15)-1 int 4个字节 32 ...
- 求区间连续不超过K段的最大和--线段树+大量代码
题目描述: 这是一道数据结构题. 我们拥有一个长度为n的数组a[i]. 我们有m次操作.操作有两种类型: 0 i val:表示我们要把a[i]修改为val; 1 l r k:表示我们要求出区间[l,r ...
- 【POJ 1741】 Tree
[题目链接] http://poj.org/problem?id=1741 [算法] 点分治 要求距离不超过k的点对个数,不妨将路径分成两类 : 1. 经过根节点 2. 不经过根节点 考虑第1类路径, ...
- js如何计算浮点数
js中浮点型是如何运算的呢? 例如:var a=0.69; 我想得到6.9 直接这样写 var c=a*10; alert(c); 得到结果是:6.8999999999999995 到网上一搜,有 ...
- Java语言的优点
1)Java为纯面向对象的语言. <Thinking in Java>提到Java语言是一种“Everything is object”的语言,它能够直接反应现实生活中的对象, 例如火车, ...