我是靠谱客的博主 丰富泥猴桃,最近开发中收集的这篇文章主要介绍Hadoop基础学习笔记系列(八)MapReduce框架、设计原则约束、实例框架栗子:汇总文章词语原则其他,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 框架
    • 用户定义
  • 栗子:汇总文章词语
  • 原则
    • 原则上
    • 好的键值
    • 任务分解
    • 设计
    • 设计约束
    • 一些栗子
      • cascade
      • join:基于key组合表
      • 向量乘法:A x B
  • 其他

理念: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的博客-CSDN博客
Python:Mapreduce+python实现简单的词频统计_ElsaWu的布袋子-CSDN博客

原则

原则上

  • 每个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

最后

以上就是丰富泥猴桃为你收集整理的Hadoop基础学习笔记系列(八)MapReduce框架、设计原则约束、实例框架栗子:汇总文章词语原则其他的全部内容,希望文章能够帮你解决Hadoop基础学习笔记系列(八)MapReduce框架、设计原则约束、实例框架栗子:汇总文章词语原则其他所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部