Hadoop学习笔记:分布式计算引擎MapReduce

本文详细介绍了Hadoop MapReduce的起源、编程模型和架构,包括MapReduce的分布式计算特点、Wordcount示例以及MapReduce的工作流程。通过MapReduce的Map阶段和Reduce阶段,阐述了数据的拆分、处理、合并和优化,如Combiner的使用。文章还探讨了MapReduce的容错性和数据本地性,并提到了推测执行机制,以应对任务运行不均衡的问题。
摘要由CSDN通过智能技术生成

MapReduce简介

MapReduce源自于Google发表于2004年12月的MapReduce论文,Hadoop MapReduce是Google MapReduce克隆版。

MapReduce源于函数式编程,包括Map和Reduce两个算子,它是一个通用的计算引擎,所以易于编程,可以实现任意的算法,表达能力很强,只是效率有区别。

MapReduce是一个分布式应用框架,解决数据导入读取,用户只需要关心如何处理数据(Map方法和Reduce方法),可以支持数据规模不断增大,机器数量的增多不会影响程序运行。分布式计算以及资源协调的错误处理由计算框架内部处理。

MapReduce有以下特点:易于编程;良好的扩展性;高容错性;适合PB级以上海量数据的离线处理,PB级数据的处理,各个节点的通信花费的时间远远超过计算的时间,MapReduce可以解决这些问题。

搜索引擎建索引是MapReduce出现的背景,另外,MapReduce也适合海量数据查找,适合大数据批量处理,比如从海量日志问价中搜索异常信息;MapReduce可以做数据统计,比如网站pv(page view)和uv(user view)的简单数据统计,以及聚类算法、分类算法、推荐算法和图算法(比如搜索引擎算网页相关性)等一些复杂数据分析算法。MapReduce是一个通用的计算引擎,各种算法都可以通过Map和Reduce两个算子来实现,通用性很强,数据多轮计算,可以减少误差,但效率不一定高。

MapReduce不适合:

  • 实时计算
    不能像MySQL一样,在毫秒级或者秒级内返回结果,这是因为MapReduce是为大规模数据批量处理准备,具有比较大的启动开销(环境的准备,数据的准备等),所以不适合做到实时计算;

  • 流式计算(数据源不断变化)
    MapReduce的输入数据集是静态的,不能动态变化,这是MapReduce自身的设计特点决定的,因为MapReduce有可能多次计算,所以如果数据不是静态的,那么不同次的计算就会不一样;

  • DAG(有向无环图)计算
    DAG是多个应用程序存在依赖关系,后一个应用程序的 输入为前一个的输出。MapReduce计算由多个子任务组成,子任务有各种依赖,必须将前面依赖的任务完成后才能继续后续的任务。MapReduce要将依赖关系转换为Map和Reduce两个算子,转换的过程遇到的问题就是数据无法共享,如果把数据共享到HDFS上,这样会产生大量的IO,会影响整个MapReduce的效率。

MapReduce编程模型

通过Wordcount示例解释:
问题:有一批文件(规模为TB级或 者 PB级),如何统计这些文件中所有单词出现的次数;
类似应用场景:搜索引擎中,统计最流行的K个搜索词; 统计搜索词频率,帮助优化搜索词提示。
方案1:用一个程序去读取和统计文件中所有单词出现的次数。
这个方案具有以下缺点:
1)执行效率低,用时长;
2)单点故障,造成程序停止;
3)网络传输效率低,IO消耗大;
4)如果文件太大,加载不到内存,那么这个程序是运行不了的,这是主要问题。

方案2:启动多个程序,分别读取不同文件中的单词出现次数,然后将这些结果进行合并。
这个方案具有以下优点:
1)本地计算,避免网络开销,IO效率高;
2)需要的内存减少;
3)执行效率高。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值