设为首页 收藏本站
查看: 1175|回复: 0

[经验分享] hadoop mapreduce作业提交流程

[复制链接]

尚未签到

发表于 2018-10-31 13:44:09 | 显示全部楼层 |阅读模式
  根据网上相关帖子以及查看部分源代码,把作业提交流程画了个流程图,并对某些步骤做详细说明,现整理如下:
DSC0000.png

  详细说明:
  一 关于分片
  1).分片的原则是:尽量保证一个片的数据不要跨数据节点,因此,最佳实践为片的大小与数据块的大小一致,这也是默认的策略
  2).分片算法由FileInput接口定义,所有输入格式指定类都必须实现此接口;分片的信息写入文件job.split中,此文件的内容格式如下:
  split文件头,split文件版本号,split的个数
  //以下是每个分片的信息
  split类型名(默认FileSplit),split的大小,split的内容(对于FileSplit,写入文件名,此split 在文件中的起始位置),split的location信息(即在那些DataNode上)
  二.作业初始化
  作业的初始化,主要工作就是初始化任务;
  map任务:
  1)通过JobClient的readSplitFile()获取分片信息
  2)初始化队列监听器EagerTaskInitializationListener把作业(JobInProgress)加入初始化队列
  public void jobAdded(JobInProgress job) {
  synchronized (jobInitQueue) {
  //加入初始化队列,这是一个List
  jobInitQueue.add(job);
  //根据作业优先级对作业进行排序
  resortInitQueue();
  //通知初始化线程JobInitThread进行初始化
  jobInitQueue.notifyAll();
  }
  }
  3)根据分片的数目创建同样多的map任务管理对象TaskInProgress
  4)根据分片数据所在的数据节点位置,绑定任务,即把任务分配给数据所在的节点。但是,只是一个关系映射,并没有真正的传输任务
  5)第四步中的这种映射关系存储在名叫nonRunningMapCache的map结构中,map的定义为:Map
  6.当某个节点有空闲的任务槽的时候,会通过心跳向jobTracker要任务,此时就可以根据自己的节点位置从nonRunningMapCache中获取任务
  reduce任务:
  其它跟map相似,只有一下几点不一样
  1)reduce任务数由JobConf配置指定,通过方法setNumReduceTasks(int num)指定
  2)reduce也有一个缓存集合存储reduce任务管理对象,但是它并不需要对节点进行分配,因为reduce任务的输入是map的输出,会有多个节点输出,所以不用刻意
  

  补充说明:当作业准备好后,接下来就是作业的分配,作业的分配本质是作业任务的分配,其次,任务分配的过程是针对整个集群中处于运行状态的所有作业的分配,根据当前taskTracker节点在机架组织结构中的位置从近到远获取任务;
  作业分配步骤:
  1.taskTracker通过心跳向jobTracker获取任务
  2.jobTracker检查上一个心跳响应是否完成
  3.检查要启动的任务数是否超出心跳节点还剩余的任务槽,超出则不分配
  4.检查即将启动的任务数和已经启动的任务数是否超过集群总的负载能力,如果超出则不分配,不超出则往下执行
  5.获取任务时,是从当前集群中所有正在运行的作业的所有任务中挑选一个适合自己的任务
  6.如果当前节点或者当前节点所在的机架上有任务,则获取一个
  7.如果当前节点或者当前节点所在的机架上没有可获取的任务,则从其它机架上获取任务
  参考资料:
  1.http://blog.csdn.net/HEYUTAO007/article/details/5725379
  2.hadoop权威指南


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629036-1-1.html 上篇帖子: 大数据时代,你不得不知的Hadoop使用技巧! 下篇帖子: Hadoop运维记录系列(五)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表