zoukankan      html  css  js  c++  java
  • MapReduce工作流程详解

    MapReduce执行步骤如下
        1、Mapper任务处理
                1.1:读取输入文件内容,将每一行解析成key、value对提供给Mapper类的map函数使用,每个键值对调用一次map函数。
                1.2:在Mapper类的map函数中使用自定义的业务逻辑,对输入key、value处理并转换成新的key、value输出。
                1.3:对输入的key、value进行分区。默认分区数为1。
                1.4:对不同分区的数据按照key进行排序、分组,将相同key的value放到一个集合中。
                1.5:对分组后的数据进行规约,此步骤不是必须的。
            2:Reducer任务处理
                2.1:对多个map任务的输出按照不同的分区,通过网络copy到不同的reduce节点。然后对多个map任务的输出进行合并、排序。
                2.2:在Reducer类的reduce函数中使用自定义的业务逻辑,对输入的key、value处理,转换成新的key、value输出。
                2.3:将Reducer类reduce函数的输出保存到文件中。
            
    逻辑上讲MapReduce运行过程分为3个阶段:
                1、Mapper阶段
                2、Shuffle阶段
                3、Reducer阶段
       
    Mapper任务数量是由输入分片InputSplit决定,输入分片则由文件/HDFS默认Bolck块大小决定(Hadoop-0.x和Hadoop-1.x为64MB;Hadoop-2.x为128MB,不足一个Bolck时按照一个Block计算)。
        例如在Hadoop-2.x中,输入文件大小为500MB,则为500MB/128MB=3%116,这时候则为4个块大小也就是被InputSplit切分为4个Block。这时候MapReduce作业的Mapper任务为4个。

    Reducer任务数量默认为1个;在MapReduce作业中如果不使用分区函数则默认是一个分区,每个分区对应一个Reducer任务。    
      Reducer的最优个数与集群中可用的Reducer任务槽总数相关,总槽数由集群节点数量*每个节点的任务槽数量,每个节点的任务槽数由。

  • 相关阅读:
    print流
    java数据流
    java转换流
    爬虫(二):urllib库文件的基础和进阶(python2.7)
    爬虫实例(二):多线程,多进程对网页的爬取
    Java多线程分析 (二)---- 高并发内存模型和线程安全
    Java多线程分析 (五)---高并发线程池
    Java 多线程分析 (四) ---高并发基础知识)
    Java(生产者与消费者方法)
    Java 多线程分析 (三) --- synchronize 同步
  • 原文地址:https://www.cnblogs.com/mengyao/p/4713147.html
Copyright © 2011-2022 走看看