分布式计算框架MapReduce

本文介绍了MapReduce的概念,源于Google的论文并在Hadoop中实现。MapReduce适合大规模数据的离线处理,但不适用于实时流式计算。它包括Map阶段和Reduce阶段,通过Mapper处理、Shuffle和Reducer处理来完成任务。Combiner作为优化手段,可以在Map端进行局部聚合,减少网络传输,提高效率。然而,对于非求和操作如平均值计算,Combiner可能导致不准确的结果。在实际使用中,需注意其优缺点。文章还提到了MapReduce编程模型的关键组件,如Split、InputFormat、OutputFormat和Partitioner,并指出忘记加载主类和提交作业会导致错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

MapReduce概述

  • 源自于Google的MapReduce论文,论文发表于2004年2月
  • Hadoop MapReduce 是 Google MapReduce 的克隆版
  • MapReduce优点:海量数据离线处理 & 易开发(相对于自己开发分布式框架来说的,现在的Spark和Flink要比MapReduce更简单) & 易运行(可以本地开发本地测试)
  • MapReduce缺点:实时流式计算

MapReduce编程模型

MapReduce编程模型之Map和Reduce阶段

  • 将作业拆分成Map阶段和Reduce阶段
  • Map阶段:Map Tasks
  • Reduce阶段:ReduceTasks

MapReduce变成模型之执行步骤

  1. 准备map处理的输入数据
  2. Mapper处理
  3. shuffle
  4. Reduce处理
  5. 结果输出

MapReduce编程模型核心概念详解

  • Split
  • InputFormat
  • OutputFormat
  • Combiner
  • Partitioner

词频统计升级之Combiner操作

Combiner

  • 优点:能减少IO,提升作业的执行性能
  • 缺点:求平均数: 总数 / 个数, 其实可以理解为非求和操作都要慎重?
    • 每个map求平均再到reducer求平均,与直接reducer求平均通常不一样。

map端的聚合操作就叫做combiner。

设map1处理了1kw个单词,均是hello,is;map2也处理了1千万个单词,均是hadoop和is。则所有的这些中间结果都需要经过网络传输,即1kw个中间结果+1kw个中间结果(map中输出的所有key都通过网络传输),可想而知,性能不会好,此时若我们先在map端做一次聚合,则只需各传输两个中间结果【(hello, 2), (is, 2)】+ 【(hadoop, 3), (is, 2)】,可以节省网络的开销,即在map端先做一次聚合,且该聚合操作和reducer的逻辑是一样的。

报错

忘记加载主类、也没有提交

[WARN ] method:org.apache.hadoop.util.NativeCodeLoader.<clinit>(NativeCodeLoader.java:62)
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

 

参考:慕课网-Hadoop 系统入门+核心精讲

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值