Mapreduce架构

195 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。
可以看一下《mapreduce design patterns》这本书

mapreduce 体系架构

client

提交程序到jobtracker,用户可通过一些接口查看运行状态

jobtracker

1.JobTracker负责资源监控和作业调度
2.JobTracker 监控所有TaskTracker与Job的健康状况,一旦发现失败,就将相应的任务转移到其他节点
3.JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器TaskScheduler),而调度器会在资源出现空闲时,选择合适的任务去使用这些资源

tasktracker

1.周期性地通过心跳讲本节点的资源使用情况和任务上报给jobtracker 2.接受jobtracker的指示,如启动任务,杀死任务 3.使用slot来等量划分本节点上的资源量,task在槽上运行

mapreduce工作

map和map之间,reduce和reduce之间,都是不相互交互的.map和reduce之间的交互不是由我们控制,只能通过Mapreduce自己的框架操作,不能显式地进行操作

image.png 其中inputformat到rr都是可以自己定义的
从map到reduce之间,主要就是shuffle阶段,不同节点之间会相互通讯,所以在这个阶段一定要减少数据量.map后会通过shuffle进行合并,最后进入reduce的数据量会变小

HDFS是以block为一个单位,但是mapreduce是以split为单位的,split的数量决定了map的数量,key的数量决定了reduce的数量

接口

1.wirteable序列化

把结构化变化为文本

1.fileinputformat

对大文件是会切片的,但是如果是用小文件就不会切片,会一个文件占用一个block,小文件应该用combinefileinputformat

3.文本输入

  1. TextInputFormat TextInputFormat是默认的InputFormat,它把输入文件的每一行作为 单独的一个记录(默认以换行符或回车符作为一行记录)。键是 LongWritable类型,存储该行在整个文件中的字节偏移量;值是这 行的内容,不包括行终止符(换行符、回车符),它被打包成一 个Text对象。
  2. KeyValueTextInputFormat KeyValueTextInputFormat会用分隔符将一行的数据分割为一个keyvalue键值对,分隔符前面的字符为key,后面的字符为value。它的默认值是一个制表符(\t)。
  3. NLineInputFormat 如果用户希望Mapper收到固定行数的输入(可以设置不同的map来处理),需要将 NLineInputFormat作为InputFormat,即NLineInputFormat可以设置 每个Mapper处理的行数。它与TextInputFormat一样,键key是文 件中行的字节偏移量,值value是行本身。

4.二进制输入

5.多种数据处理

mapreduce高级概念

1.mr partition

Partition主要作用就是将map的结果发送到相应的reduce。这就对partition有 两个要求:
1)均衡负载,尽量的将工作均匀的分配给不同的reduce。
2)效率,分配速度一定要快。

2.shuffle

1)完整地从map task端拉取数据到reduce 端。
2)在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。
3)减少磁盘IO对task执行的影响。 调整buffer大小、使用比例、合并数