大数据,机器学习,人工智能玩转大数据大数据

大数据面试 | 03 通过实例思考MR1.0 工作流程--单词统

2020-02-24  本文已影响0人  彬彬有李学数据

目录

input split

map

shuffle

reduce

架构设计

一个单词统计的例子引入


单词统计.png

input split

在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split)每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组

输入分片(input split)往往和hdfs的block(块)关系很密切,假如我们设定hdfs的块的大小是64mb,如果我们输入有三个文件,大小分别是3mb、65mb和127mb,那么mapreduce会把3mb文件分为一个输入分片(input split),65mb则是两个输入分片(input split)而127mb也是两个输入分片(input split),

换句话说我们如果在map计算前做输入分片调整,例如合并小文件,那么就不会有5个map任务将执行,而且每个map执行的数据大小不均,这个也是mapreduce优化计算的一个关键点。

map

就是编写好的map函数,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行

shuffle

Shuffler.png
Shuffle.png

reduce

和map函数一样也是程序员编写的,最终结果是存储在hdfs上的。

MR1.0 运行架构

MR1.0 运行架构.png

MapReduce1 的工作机制中,角色主要包括客户端, Jobtracker,Tasktracker
Jobtracker 主要是协调作业的运行
Tasktracker 是负责运行作业划分之后的任务

JobTracker

Tasktracker

MR1.0弊端

Client

Mapper计算框架.png Reducer计算框架.png

MapReduce 过程(了解):

  1. 首先是由客户端向 Jobtracker 请求一个新的作业,Jobtracker 会检查作业的 输出路径是否存在。若存在则抛出异常。若不存在的话,Jobtracker 会向客户端返回 job 相关资源的提交路径以及 jobID。

  2. 接下来就是客户端会将 job 所需的资源(jar 文件,配置文件)交到共享文件系统。并告知 Jobtracker 已将 job 复制到共享文件系统,准备执行。

  3. Jobtracker 将提交的 Job 放入内部的任务队列,由作业调度器进行调度,并进行初始化(包括创建一个表示正在运行作业的容器,用于封装任务和记录信息)

  4. 之后 jobtracker 的作业调度器从共享文件系统获取客户端计算好的输入切 片,以创建任务运行列表

  5. Tasktracker 通过心跳与 Jobtracker 保持通信,报告自己的状态,以及是否准 备好运行一个 task,若准备好 ,Jobtracker 则通过一定的调度算法从 Jobtracker 中获得一个 task 分配给 Tasktracker。

  6. Tasktracker 在共享文件系统中获得任务相关资源,实现 jar 本地化,并创建 响应的文件夹以及一个 taskrunner 运行该任务。

  7. taskrunnr 会启动一个新的 JVM,在新启动的 JVM 中运行任务。

进度与状态的更新:有一个独立的线程向 tasktracker 报告当前任务状态。同时 Tasktracker 每隔 5s 向 Jobtracker 通过心跳发送状态。JobTracker 将这些更新 合并,发送给客户端。

上一篇下一篇

猜你喜欢

热点阅读