您的位置:首页 > 运维架构

hadoop学习笔记之Map-Reduce

2015-08-25 00:04 369 查看
Map-Reduce的工作机制:

 a、编写好一个Map-Reduce程序,运行作业程序。

 b、JobClient向JobTracker申请一个作业ID,

 c、JobClient将作业所需要的资源,复制到HDFS系统中。

 d、c、JobClient提交作业

 e、JobTracker初始化作业。

 f、JobTracker向nameNode询问,决定这些任务在哪些机器上跑。

  有关的数据在哪些文件里,这些文件保存在哪些节点的数据块中。

 (程序要和所要运行的作业资源在一起)

 根据taskTracker与JobTracker之间的心跳,知道哪些task可以参与到本次作业中来。

   如:taskTracker必须是活着的,Tracker中是否有其他作业在做。

   确定哪些taskTracker

 g、taskTracker和JobTracker保持心跳,以确定taskTracker是否正常。

 h、taskTracker从HDFS中将相关代码、资源等获取到本地。

 i、架设java虚拟机

 j、开始工作。

 k、taskTracker将结果写入本地硬盘(这个是中间结果不写入HDFS)

任务执行优化

   a、推测式执行:当jobTracker发现有任务拖后腿了,就会额外启动相应的备份任务。当哪个先执行完了,就将另一个kill掉

     缺点:当问题产生的原因是因为代码问题,而不是机器性能问题时,这种机制反而会使得集群的性能下降。

     解决方案:可以在mapred-site.xml中配置关闭推测式执行。

   b、重用JVM

     java之所以慢,最大的原因是JVM启动慢,为了避免反复启动多个JVM,可以配置单个JVM运行的最大任务数。

   c、忽略模式

     有的时候,节点的数据损坏了(hadoop中错误是常态)。任务在读取数据失败2次后,会把数据位置告诉jobtracker,jobtracker在重新启动该任

     务并且在遇到所记录的坏数据时直接跳过。此配置默认是关闭的。用SkipBadRecord打开。

错误处理机制:硬件故障

   a、硬件故障是只jobtracker故障或者tasktracker故障。

   b、jobtracker是单点的,若发生单点故障则hadoop无法处理。选择稳定的系统作为jobtracker.

   c、jobtracker通过心跳(周期1分钟)信号了解tasktracker是否发生故障或者负载过高。

   d、jobtracker将发生故障的tasktracker从任务节点中移除。

   e、若故障节点移除时,有map任务正在执行并且没有完成,则jobtracker会要求其他节点重新执行未完成的map任务。

   f、若故障节点移除时,有reduce任务正在执行并且没有完成,则jobtracker会要求其他节点继续(不是重新执行,为什么呢?)执行未完成的reduce任务。

错误处理机制:任务失败

   a、由于代码层面出现故障,如死循环等。

   b、jvm自动退出,向tasktracker进程发送错误信息,并将错误信息写入日志。

   c、tasktracker在监听到任务退出,或者长时间没有收到信息时,则会判定该任务失败。将任务计数-1,并通过心跳信号告知jbtracker任务失败。

   d、jobtracker会将失败的任务重新放入调度队列中重新分配执行,任务也有可能被分配给原来错误的那个节点执行。

   e、如果某个任务失败次数超过一定值(默认4次,怎么设置?),则该任务将不再被执行,同时此次作业宣告失败。

   


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop MapReduce