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.如果最后想多个结果文件的结果合并在一起,

  • 相关阅读:
    Dynamics AX 2012 R2 配置E-Mail模板
    Dynamics AX 2012 R2 设置E-Mail
    Dynamics AX 2012 R2 为运行失败的批处理任务设置预警
    Dynamics AX 2012 R2 耗尽用户
    Dynamics AX 2012 R2 创建一个专用的批处理服务器
    Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
    Dynamics AX 2012 R2 安装额外的AOS
    Dynamics AX 2012 R2 将系统用户账号连接到工作人员记录
    Dynamics AX 2012 R2 从代码中调用SSRS Report
    Dynamics AX 2012 R2 IIS WebSite Unauthorized 401
  • 原文地址:https://www.cnblogs.com/Striverchen/p/10557828.html
Copyright © 2011-2022 走看看