Hadoop之Map-Reduce

运用场景

  1. 高容错
  2. 高扩展
  3. 编程简单
  4. 符合那个数量离线批量划算处理(注意,MB级别的数目直接用Java处理,PB级别以上之才生必不可少采取mapreduce)
  5. 起推(需要实时处理数据用Hbase或storm)

原理图

image

map任务处理

  1. 读取输入文件内容,解析成key,value对。对输入文件之各国一样尽,解析成key,value对。每一个键值对调用一赖map函数
  2. 写自己之逻辑,处理输入的key,value,转成为新的key,value输出
  3. 针对输出的key,value进行分区
  4. 本着两样分区的数目,按照key进行排序,分组。相同key的value放到一个聚众中
  5. 分组后对数据开展==归约== (可选)

reduce任务处理

  1. 本着几近个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
  2. 针对大多单map任务的输出进行统一,排序。写reduce函数自己之逻辑,对输入的key,value处理,转换成新的key,value输出。
  3. 把reduce的出口保存到文件中。

map&reduce键值对格式

  1. map函数

  2. 输入键值对 <K1,V1>

  3. 输出键值对 <k2,v2>

  4. reduce()函数

  5. 输入键值对 <k2,{v2}>

  6. 输出键值对<k3,v3>

mapreduceg过程各个角色的意向

  • jobclient:提交作业
  • jobtracker:初始化作业,分配作业,tasktracker与那展开通信,协调监控所有作业
  • taskTracker:定期与jobtracker通信,执行map和reduce任务
  • HDFS:保存作业的多少,配置,jar包,结果

学业提交流程

  1. 交付作业准备

  2. 修好的mapreduce程序

  3. 安排作业,包括输入输出路径等等

  4. 付作业

  5. 部署好后,通过jobclient提交

  6. 切切实实效果

  7. 与jobTracker通信得到一个jar的仓储路径和JobId

  8. 输入输出路径检查,将jobjar拷贝到HDFS中
  9. 写job.xml,真正付诸作业

学业初始化

  1. 客户端提交作业后,jobTracker会将作业在到队中,然后开展调度,默认是FIFO的点子
  2. 具体职能

  3. 作业初始化主要是借助JobInProgress中做到的

  4. 读取分片信息
  5. 创建task:包括map和reduce任务
  6. 创建taskInProgress执行task,包括map任务和reduce任务

任务分配

  1. TashTracker和jobtracker之间的通信与任务分配是经心跳机制落实之
  2. tasktracker会主动定期的想jobtracker发送报告,询问是否有职责要举行,如果有就申请及任务;如果没有任务,就一直申请

任务尽

  1. 当tasktracker拿到任务,会以信息拷贝到当地,包括代码,配置,分片信息相当
  2. tasktracker中之localizeJob()方法会吃调用进行本地化,拷贝job.jar,jobconf,job.xml到本地
  3. TaskTracker调用launchTaskForJob()方法加载启动任务
  4. MapTaskRunner和ReduceTaskRunner分别启动Javachild进行来施行相应的职责

错误处理

  1. JobTracker失败

  2. hadoop2.0之前有单点故障问题

  3. TraskTracker失败

  4. TraskTracker崩溃了会客告一段落往JobTracker发送心跳信息

  5. JobTracker会将TraskTracker从等待的天职池中移除,并将拖欠任务变到任何地方实践
  6. JobTracker将TraskTracker加入到黑名单中s

  7. Task失败

  8. 职责失败,会朝着TraskTracker抛来深,任务挂于

牛逼啦:mapreduce词频统计的法则

HDFS中words文件内容:
hello a
hello b
hello c

  1. map处理
  1. reduce处理

一个敲代码,爱享受的食指,我当此处!

来玩啊

相关文章