MapReduce基础(学习笔记)

1、简介

MapReduce是一个用于处理海量数据的分布式计算框架。这个框架解决了:

1.数据分布式存储

上一篇文章提到MapReduce自身是不存储数据的,数据都存取在HDFS上,计算的目标数据就是来自于HDFS。

2.作业调度

一个Hadoop集群上可以跑很多个MapReduce,不可能某一个MapReduce占了所有资源,资源是共享的。

3.容错

非个人因素导致的问题比如网络堵塞、机器间通信等复杂问题,会自动切换到其他节点上。

 

2、MapReduce分而治之思想

1、数钱实例:一堆钞票,各种面值分别多少

-单点策略

  •  一个人数所有的钞票,数出各种面值有多少张

-分治策略

  • 每个人分得一堆钞票,数出各种面值有多少种
  • 汇总,每个人负责统计一种面值

2、解决数据可以切割进行计算的应用

  • 分治思想

        -分解

        -求解

        -合并

  • MapReduce映射

        -分:map

        把复杂的问题分解为若干“简单的任务”

        -合:reduce

3、MapReduce计算框架·执行流程(重点)

开发人员一般情况下需要关心的是图中灰色的部分。↑

 

Map和Reduce部分细节化↓:

Map部分:

一个map实际上对应一个split分片,首先map读取split,因为map是一个程序,作为系统里面的一个进程,自己维护着一个进程空间。把split数据读进来之后直接存到了自己的内存上(buffer in memory),然后开始往内存写。内存默认大小为100M,但是100M很容易写满,当它写到80M的时候会锁住内存区,然后把这80%的数据转储到磁盘上,然后清理内存。转储的过程中会作排序(sort),图中partitions中三个部分相当于前面数钱的例子中面值的分类。三个小的数据部分再归并排序成大的数据(merge on disk)。途中只展示出一个Map的执行流程,还有other maps。

Reduce部分

还是数钱的例子,假设图中Reduce部分是负责处理一百元面值的,把每个Map上属于一百元区域的数据通过fetch红线全部归纳到Reduce机器上(相当于拷贝)。然后把从每个从Map拷贝过来的数据两两合并,再统一交给Reduce处理,最后输出。

4、两个重要的进程

-JobTracker

  • 主进程,负责接收客户作业提交,调度任务到作节点上运行,并提供诸如监控工作节点状态及任务进度等管理功能,一个MapReduce集群有一个JobTracker,一般运行在可靠的硬件上。
  • TaskTracker是通过周期性的心跳来通知JobTracker其当前的健康状态,每一次心跳包含了可用的Map和Reduce任务数目、占用的数目以及运行中的任务详细信息。JobTracker利用一个线程池来同时处理心跳和客户请求。

-TaskTracker

  • 由JobTracker指派任务,实例化用户程序,在本地执行任务并周期性地向JobTracker汇报状态。在每一个工作节点上永远只会有一个TaskTracker。

-JobTracker一直在等待用户提交作业

-TaskTracker每隔3秒向JobTracker发送心跳询问有没有任务可做,如果有,让其派发任务给它执行

-Slave主动向Master拉生意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值