分布式计算框架MapReduce总结

版权声明:个人博客网址 https://29dch.github.io/ 博主GitHub网址 https://github.com/29DCH,欢迎大家前来交流探讨和fork! https://blog.csdn.net/CowBoySoBusy/article/details/82930782

源自于Google的MapReduce论文,克隆复制发展而来
优点:海量数据离线处理&易开发&易运行(与Spark比较还是弱很多)
缺点:难以满足实时流式计算
在跑MapReduce时,前面我的几篇博客说的HDFS和YARN都必须先跑起来

词频统计案例分析:
wordcount: 统计文件中每个单词出现的次数

需求:求wc

  1. 文件内容小:shell(wc_shell.sh)
    在这里插入图片描述
    2)文件内容很大: TB或者GB量级时,如何解决大数据量的统计分析
    比如求某个域名的访问量时
    > url TOPN < wc的延伸
    工作环境中很多场景的开发都是在wc的基础上进行改造的
    借助于分布式计算框架来解决: mapreduce
    (input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output)
    在这里插入图片描述
    思想:分而治之

核心概念:
在这里插入图片描述
Split:交由MapReduce作业来处理的数据块,是MapReduce中最小的计算单元
HDFS:blocksize 是HDFS中最小的存储单元 128M
默认情况下:他们两是一一对应的,当然我们也可以手工设置他们之间的关系(不建议这么做)

InputFormat:
将我们的输入数据进行分片(split): InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;
TextInputFormat: 处理文本格式的数据
OutputFormat: 输出
在这里插入图片描述
MapReduce1.x的架构
1)JobTracker: JT
作业的管理者
将作业分解成一堆的任务:Task(MapTask和ReduceTask)
将任务分派给TaskTracker运行
作业的监控、容错处理(task作业挂了,重启task的机制)
在一定的时间间隔内,JT没有收到TT的心跳信息,TT可能是挂了,TT上运行的任务会被指派到其他TT上去执行

2)TaskTracker: TT
任务的执行者
在TT上执行我们的Task(MapTask和ReduceTask)
会与JT进行交互:执行/启动/停止作业,发送心跳信息给JT

3)MapTask
自己开发的map任务交由该Task出来
解析每条记录的数据,交给自己的map方法处理
将map的输出结果写到本地磁盘(有些作业只仅有map没有reduce==>HDFS)

4)ReduceTask
将Map Task输出的数据进行读取
按照数据进行分组传给我们自己编写的reduce方法处理
输出结果写到HDFS
MapReduce2.x的架构
在这里插入图片描述

更多代码以及详细信息见我的github相关项目
https://github.com/29DCH/Hadoop-MapReduce-Examples

猜你喜欢

转载自blog.csdn.net/CowBoySoBusy/article/details/82930782