zoukankan      html  css  js  c++  java
  • job任务执行流程与分区机制

    job任务执行流程
        1.run job阶段
            ①收集整个job的环境信息(比如通过conf设定的参数,还有mapperClass,reducerClass,以及输出kv类型)
            ②会计算当前job的切片数量(切片不同等切块,用FileSplit:path  start length)
            ③检测环境信息的合法性,以及输入和输出的路劲合法性。
        2.如果第一步的检测通过之后,会去找JobTracker,为当前的job申请jobid,用于标识job。jobid是全局唯一的,目的是管理job,因为整个集群同一时间内可能跑多个job。
        3.JobClient收到jobid,就将此job的运算资源(①conf.xml ②summary ③jar 包)
    提交到HDFS上,目录路径:/tmp/hadoop-yarn/history/done_intermediate/root
    conf.xml:存储的是job的环境配置信息
    summary:jobid,mapTask数量和reduceTask数
    jar包:程序员写的代码
        4.JobClient 做submit job动作,底层是把第三步的job的资源路径信息告知给JobTracker。
        5.6 去HDFS上拿取job的运算资源,然后做job的初始化,查看配置信息,以及拿到job的切片数量(本地目的是获取有几个mapTask)
        7.任务的领取,底层要满足数据本地化策略,节省集群的带宽---:因为MapTask读取文件是按行读取,所以必须要保证读取的是完整一行。底层会发生一个位置追溯的动作,此过程不可避免的会发生网络数据的传输,但数据量很小。
        8.去HDFS获取job 的运算资源(主要是jar包),然后结合代码来处理数据了。
    这里体现了Hadoop的思想:移动的是运算,而不是数据。目的也是节省集群带宽
        9.10启动JVM进程,执行MapTask或ReduceTask。
        注意:MapTask任务的数量=job的切片数量  

    分区机制
        
            1.一个Job的ReduceTask数量,默认就1个。
            2.习惯上,把reduceTask叫做分区,即有几个reduceTask,就有几个分区。
            3.Hadoop底层有一个默认的分区器(HashPartitioner),此分区器的作用可以确保相同的Mapper输出key落到同一个分区(reduceTask)里。
            4.最后的结果文件数量=分区(reduceTask)数量,即每个结果文件存储的是对应分区的结果数据。
            5.因为底层用的是简单hash算法,所以会产生数据倾斜,有时会产生某个结果文件数据很少或没有的情况。
            6.如果最后想多个结果文件的结果合并在一起,

  • 相关阅读:
    第22课对象的销毁
    第21课对象的构造顺序
    第20课 初始化列表的使用
    第19课构造函数(下)
    第18课构造函数(中)
    第17课构造函数(上)
    第16课类的真正形态
    调试环境的搭建
    Hello,DTOS!(下)
    Hello,DTOS!(中)
  • 原文地址:https://www.cnblogs.com/Striverchen/p/10557828.html
Copyright © 2011-2022 走看看