你好,游客 登录 注册 搜索
背景:
阅读新闻

Hadoop之Map-Reduce

[日期:2016-07-19] 来源:简书  作者:王中阳 [字体: ]

应用场景

  1. 高容错
  2. 高扩展
  3. 编程简单
  4. 适合大数据离线批量计算处理(注意,MB级别的数据直接用Java处理,PB级别以上的才有必要使用mapreduce)
  5. 有延迟(需要实时处理数据用Hbase或storm)

原理图

Hadoop

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处理 
  2. reduce处理 




收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款