本文已参与「新人创作礼」活动,一起开启掘金创作之路。
可以看一下《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自己的框架操作,不能显式地进行操作
其中inputformat到rr都是可以自己定义的
从map到reduce之间,主要就是shuffle阶段,不同节点之间会相互通讯,所以在这个阶段一定要减少数据量.map后会通过shuffle进行合并,最后进入reduce的数据量会变小
HDFS是以block为一个单位,但是mapreduce是以split为单位的,split的数量决定了map的数量,key的数量决定了reduce的数量
接口
1.wirteable序列化
把结构化变化为文本
1.fileinputformat
对大文件是会切片的,但是如果是用小文件就不会切片,会一个文件占用一个block,小文件应该用combinefileinputformat
3.文本输入
- TextInputFormat TextInputFormat是默认的InputFormat,它把输入文件的每一行作为 单独的一个记录(默认以换行符或回车符作为一行记录)。键是 LongWritable类型,存储该行在整个文件中的字节偏移量;值是这 行的内容,不包括行终止符(换行符、回车符),它被打包成一 个Text对象。
- KeyValueTextInputFormat KeyValueTextInputFormat会用分隔符将一行的数据分割为一个keyvalue键值对,分隔符前面的字符为key,后面的字符为value。它的默认值是一个制表符(\t)。
- 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大小、使用比例、合并数