Hadoop基础学习笔记系列(八)MapReduce框架、设计原则约束、实例

本文探讨了Hadoop MapReduce在实时更新和大规模数据扫描场景中的应用,强调用户定义键值对的重要性,提供了词频统计和向量乘法示例,讲解了合成键、级联join和combiner优化策略,同时揭示了设计约束和最佳实践。

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


理念:Bring computation to DATA

框架

何时使用?

  • 数据需要经常update——DBMS
  • 需要扫描数据——MR

用户定义

  • 所有数据都会被转换成键值对的形式(基本单元)<key,value>
  • mapper(独立可分,在数据上运行):应用到数据的function,输入:数据,输出:键值对
  • reducer:应用到中间数据的function,输入:键值对,输出:结果

Hadoop能够处理其中间的协调工作,会将map function应用在数据所在的位置(可复制、分布式),根据key来shuffle、group数据形成中间数据,然后使用reduce function来获取最终结果。
![[Pasted image 20220215171030.png]]

栗子:汇总文章词语

JAVA:MR英语单词频次统计案例-----wordcount_tianqinglei的博客-优快云博客
Python:Mapreduce+python实现简单的词频统计_ElsaWu的布袋子-优快云博客

原则

原则上

  • 每个data spit一个mapper
  • 每个核一个reducer
    但可以根据task改变。如果每个reducer产出的结果很多,可以少于核的个数。

好的键值

  • 简单
  • 能够让reducer获得正确的输出

任务分解

  • mappers:简单可分
    • common mappers:
      • filter(子数据集)
      • identity(传递数据)
      • splitter(汇总计数)
  • reducers:易于合并

设计

  • 合成键:当有两个域需要被group,并使用value来存其他信息
  • 级联(cascade)
  • bin keys into ranges
  • combiner map输出前可以聚合结果减少shuffle

设计约束

  • 必须符合键值对的范式
  • 不存储中间数据
  • 需要编程,需要debug
  • 无法迭代(有些算法需要)

一些栗子

key可以是多个item(合成键),例如汇总多天的词频,可以使用<date word,count>

cascade

![[Pasted image 20220215204010.png]]

join:基于key组合表

  1. fileA词,词频 fileB日期,词,词频
    A:key:word;value:total-count
    B:key:date,word;value:day-count
  2. 把date放在value(因为需要输出)
    A:key:word;value:total-count
    B:key:word;value:date day-count
  3. reducer可以通过一个key对应几个value来确定是来自A还是B

向量乘法:A x B

<index, number>

计算成本,要考虑:

  • map()需要输出多少<index, number>?
  • 有多少index需要shuffle?

如果是两个N维向量相乘,2N indices,N pairs,N个group会被shuffle到reducer

Group越多,shuffle的成本越高

如何降低shuffle成本?

  • combine map in mapper
  • 例如,在统计词频时候,可以先在map的结果里把一篇文章的词频汇总好,再shuffle进入reducer进行汇总
  • 例如,在向量乘法计算时,可以将N维向量划分为一些bin,比如r=10个一组,划分为N/10个bin,新的key使用bin的index,向量的数字可以放在value里面。

平衡

  • 如果r减小,N/r增大,shuffle成本提高,但是reducer的复杂度会下降。
  • 基于数据和硬件

扩展到矩阵运算,keys中需要有行号和列号

其他

  • 延伸MR做数据处理:Pig、HIVE(类SQL接口)
  • 提供交互性和持续性:Spark
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值