`
febird
  • 浏览: 256385 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MapReduce做了多余的事情

阅读更多

MapReduce做了多余的事情

本文假定读者已了解MapReduce

Map

Map阶段一般做三件事情:

1. 切分输入

2. 变换输入为输出

3. 执行可选的Combine

如果要说哪项是多于的,大概就是Combine了。Combine在很多时候可以减少传递给Reduce的数据量;但是,也有一些时候,Combine只是空耗时间:

1. Map输入中重复Key很多时,Combine会提高性能

2. Map输入中重复Key很少时,Combine会降低性能

3. 网络速度很快时,Combine提高的性能有限,甚至不会提高性能

作为总结:用不用Combine,一方面取决于数据的特征(重复Key的多寡);另一方面就是网络带宽。

Reduce

以下ReduceCallback指应用程序定义的Reduce回调函数。

 

Reduce阶段,传统上,Reduce阶段做三件事情:

1. shuffle

把各个Map进程产生的结果,按 i = Hash(Key, ReduceCount) 将记录分配给第 i Reduce进程。

2. sort

将每个Reduce进程原始输入(shuffle产生的)进行排序,将key相同的记录对应的value集中到一起,产生{key,[value]}

3. reduce

读取{key,{value}},为每个(key,{value}),调用应用程序自定义的reduce函数。

 

通过这种方式,应用程序只需要实现mapreduce方法,其它一切都交给框架来完成了,应用程序会非常简单。也正因此,性能会受到一定影响:

从理论上讲,Reduce进程收到第一条记录时,就可以开始ReduceCallback了。但是,因为需要sort,就必须等到所有的记录全部接收,才能开始排序,排序完了才能开始ReduceCallback

实际上,使用一些优化手段,也可以在一边接收数据,一边做部分排序。比如在接收输入时使用置换选择排序生成初始段,等输入全部读完(所有Map进程都结束),再做一次多路归并,归并的同时,就可以调用ReduceCallback

如果我们只是做简单的计数工作(如WordCount),并非必须等到排序完了才开始回调应用程序的Reduce。如果接收输入时就开始ReduceCallback(同时写入backup文件),这样MapReduce是完全并行的,Map进程结束时,Reduce差不多就可以开始输出结果了。

如果考虑到容错,假定Map是幂等的,那么,相同的输入将产生完全相同的输出。

框架总需要维护MR[m][r]矩阵,设每个矩阵元素为EE中至少包含一个全局文件,一个完成状态:

struct E {

string filebackup; // 一旦某个reduce失败,从这里恢复

OtherState state;

int recordno; // 新增

};

 

如果再每个矩阵元素中增加一个当前记录号recordno.当一个map进程失败重启时,直接忽略recordno之前的元素,只处理recordno之后的记录。Map失败的恢复策略和当前的实现也就这么些不同。

Map的幂等性很重要,如果Map不是幂等的,两次运行的结果可能会有不同;因此不能用recordno。在现实中,实际上很难遇到不满足Map幂等性的情况,如果真出现了这种情况,绝大多数也是程序错误!所以,这个重要性,更多是理论上的意义。

Reduce[j]失败时,恢复策略也还跟以前一样。读入所有的MR[*][j].filebackup,并调用ReduceCallback

美好的

我预计,如果使用了这样的实现,MapReduce的性能会有大幅提升。

分享到:
评论
1 楼 dillony 2009-12-01  
有道理,combiner的使用不是很好把握的。
这个mapreduce都建立在io的基础上,这个缺点最严重!

相关推荐

    分布式编程模式MapReduce应用[参考].pdf

    作为 Hadoop 程序员,需要做的事情包括: 1、定义 Mapper,处理输入的 Key-Value 对,输出中间结果。 2、定义 Reducer,可选,对中间结果进行规约,输出最终结果。 3、定义 InputFormat 和 OutputFormat,可选, ...

    MapReduce执行流程

    将任务输出保存到HDFS若对流程细节进行深究,可以得到这样一张流程图从生命周期的角度来看,mapreduce流程大概经历这样几个阶段:初始化、分配、执行、反馈、成功与失败的后续处理每个阶段所做的事情大致如下1

    你学完Python之后能做什么?.docx

    Python 应用领域概述 Python 是一种广泛应用的编程语言,自 2015 年开始在国内慢慢流行起来,特别是在 2016 年热度更高,目前已经成为"全民 ...Python 的应用领域非常广泛,学习 Python 之后可以做很多有趣的事情。

    php-map-reduce:扇出,扇入处理,用于PHP

    MapReduce for PHP 扇出,扇入处理,用于PHP这个怎么运作你会需要工作来源( Workload ) 将其分解为大块的一种方法(一个Sharder ) 在每个块上要做的事情(一个Worker ) 一种Aggregator所有工作人员( Aggregator...

    你需要Spark的10个理由

    1,Spark是可以革命Hadoop的目前唯一替代者,能够做Hadoop做的一切事情,同时速度比Hadoop快了100倍以上: Logistic regression in Hadoop and Spark 可以看出在Spark特别擅长的领域其速度比Hadoop快120倍以上! ...

    基于大数据分析的文本智能识别系统的研究.pdf

    人工智能不断的发展,由于人工智能主要是利用智能学习算法,从大量的数据中学习经验来改善系统自身的性能,从而实现人类智慧所能做的事情。 文本分类是人工智能应用的一个重要方向,在现实生活中应用广泛,比如新闻...

    hadoop学习手册

    Secondary NameNode(SNN)只与NameNode通信,定时获取HDFS元数据的快照,一个集群只有一个SNN,且SNN所在节点只运行SNN守护进程,不干其它的事情。当NameNode出现故障后,可以人工启用SNN作为NameNode。 ...

    大数据基础复习

    在这种模式下,用户线程发起IO请求后可以去做其他事情,操作系统会在IO操作完成时通过回调机制通知用户线程。 二、BlockQueue(阻塞队列) BlockQueue是Java并发编程中的重要工具,它是一种特殊的队列,当队列满时...

    yelp-dataset-project:Yelp 学术数据集项目

    现在没有被使用,而是在 DSParser 项目中开发了一些特性来在 java 中做同样的事情。 4.) DSOutputAnalyser:-包含分析unigrams、bigrams结果的工具。 5.) SLURM_Scripts:- 包含运行 Mahout Naive Bayes 的 SLURM

    Insight_Data_Coding_Challenge:字数和移动中位数

    如果您的计算机上没有做过类似的事情,请执行以下操作(假设您使用的是 Ubuntu 14.04): 在此链接下载文件 hadoop-2.6.0.tar.gz: http://apache.mirrors.hoobly.com/hadoop/common/hadoop-2.6.0/ 将 hadoop-...

    模拟'incast'网路流量模式Incast.zip

    相关知识:Incast(又称TCP incast,因为是TCP协议的事情)是many-to-one的通信模式,因为云计算应用导致这种技术主要是TCP协议方式的。Incast技术主要发生在云计算数据中心,尤其是那些以scale out方式实现的分布式...

    大数据数据仓库建立和离线数据分析.zip

    离线数据分析方法涵盖描述性分析(了解过去发生的事情)、探索性分析(发现数据中的新信息)、预测性分析(预测未来趋势)和规范性分析(提出最佳决策建议)。 在mall-data-warehouse-main这个项目中,可能包含购物...

    Luigi:Python模块可帮助您构建批处理作业的复杂管道-开源

    这些任务可以是任何事情,但通常都是长期运行的任务,例如Hadoop作业,向数据库转储数据或从数据库转储数据,运行机器学习算法或其他任何事情。 您几乎可以构建任何所需的任务,但是Luigi还附带了一个包含多个常用...

    常见的hadoop十大应用误解

    1. **误解:Hadoop 可以做任何事情** **正解:** Hadoop 并非万能解决方案。虽然它的设计目标是为了处理大量非结构化和半结构化数据,但并不意味着它可以无缝替代所有现有系统。如同早期的数据库,Hadoop 需要特定...

    大数据技术与应用题库完整.docx

    5. 大数据处理技术:大数据处理技术是指处理和分析大量数据的技术和方法,包括传统的数据挖掘技术和新兴的大数据处理技术,如MapReduce、Hadoop等。 6. 人工智能:人工智能是指让机器像人一样思考和学习的技术,...

    初学者大数据入门,这这些书一定要要看.docx

    大数据作为当今时代的热门技术之一,对于初学者来说,入门学习是一件非常重要的事情。在这个过程中,阅读相关书籍是非常必要的。本文将推荐一些关于大数据的书籍,帮助初学者更好地入门和学习大数据相关技术。 ...

    策略周报:“以大为美”的演绎、逻辑及推演.zip

    5. **大数据分析**:数据分析是大数据的核心,包括描述性分析(理解过去发生的事情),预测性分析(预测未来可能发生的事情)和规范性分析(建议应该采取的行动)。 6. **大数据应用**:大数据在众多领域都有应用,...

    大数据基础加强

    1. 分析方法:大数据分析包括描述性分析(理解过去发生的事情)、预测性分析(预测未来可能发生的事情)和规范性分析(提出最优决策建议)。常用工具有R、Python、Tableau等。 2. 机器学习与人工智能:大数据与机器...

Global site tag (gtag.js) - Google Analytics