zoukankan      html  css  js  c++  java
  • (转) hadoop 一个Job多个MAP与REDUCE的执行

    http://blog.csdn.net/chaoping315/article/details/6221440

    在hadoop 中一个Job中可以按顺序运行多个mapper对数据进行前期的处理,再进行reduce,经reduce后的结果可经个经多个按顺序执行的mapper进行后期的处理,这样的Job是不会保存中间结果的,并大大减少了I/O操作。

    例如:在一个Job中,按顺序执行 MAP1->MAP2->REDUCE->MAP3->MAP4 在这种链式结构中,要将MAP2与REDUCE看成这个MAPREDUCE的核心部分(就像是单个中的MAP与REDUCE),并且partitioning与shuffling在此处才会被应用到。所以MAP1作为前期处理,而MAP3与MAP4作为后期处理。

    [java] view plaincopy
     
    1. Configuration conf = getConf();  
    2. JobConf job = new JobConf(conf);  
    3.   
    4.   
    5. job.setJobName(“ChainJob”);  
    6. job.setInputFormat(TextInputFormat.class);  
    7. job.setOutputFormat(TextOutputFormat.class);  
    8.   
    9.   
    10. FileInputFormat.setInputPaths(job, in);  
    11. FileOutputFormat.setOutputPath(job, out);  
    12.   
    13.   
    14. JobConf map1Conf = new JobConf(false);  
    15.   
    16. ChainMapper.addMapp(job,  
    17.                     Map1.class,  
    18.                     LongWritable.class,   
    19.                     Text.class,  
    20.                     Text.class,  
    21.                     Text.class,  
    22.                     true,  
    23.                     map1Conf);  
    24.   
    25. //将map1加入到Job中  
    26.   
    27.   
    28. JobConf map2Conf = new JobConf(false);  
    29. ChainMapper.addMapper(job,  
    30.                       BMap.class,  
    31.                       Text.class,  
    32.                       Text.class,   
    33.                       LongWritable.class,  
    34.                       Text.class,  
    35.                       true,  
    36.                       map2Conf);  
    37.   
    38. /将map2加入到Job中  
    39.   
    40.   
    41.    
    42.   
    43.   
    44. JobConf reduceConf = new JobConf(false);  
    45. ChainReducer.setReducer(job,  
    46.                         Reduce.class,  
    47.                         LongWritable.class,  
    48.                         Text.class,  
    49.                         Text.class,  
    50.                         Text.class,  
    51.                         true,  
    52.                         reduceConf);  
    53.   
    54. /将reduce加入到Job中  
    55.   
    56.   
    57.    
    58.   
    59.   
    60. JobConf map3Conf = new JobConf(false);  
    61. ChainReducer.addMapper(job,  
    62.                        Map3.class,  
    63.                        Text.class,  
    64.                        Text.class,  
    65.                        LongWritable.class,   
    66.                        Text.class,  
    67.                        true,  
    68.                        map3Conf);  
    69.   
    70. /将map3加入到Job中  
    71.   
    72.   
    73.   
    74. JobConf map4Conf = new JobConf(false);  
    75. ChainReducer.addMapper(job,  
    76.                        Map4.class,  
    77.                        LongWritable.class,  
    78.                        Text.class,   
    79.                        LongWritable.class,  
    80.                        Text.class,  
    81.                        true,  
    82.                        map4Conf);  
    83.   
    84. //将map4加入到Job中  
    85.   
    86. JobClient.runJob(job);  
    87.   
    88. 注:上一个的输出是一下的输入,所以上一个的输出数据类型必须与下一个输入的数据类型一样  
    89.   
    90.    

    ***************************************************

    addMapper中的参数

    public static <K1,V1,K2,V2> void
    addMapper(JobConf job,
                        Class<? extends Mapper<K1,V1,K2,V2>> klass,
                        Class<? extends K1> inputKeyClass,
                        Class<? extends V1> inputValueClass,
                        Class<? extends K2> outputKeyClass,
                        Class<? extends V2> outputValueClass,
                        boolean byValue,
                        JobConf mapperConf)

  • 相关阅读:
    Dll版本管理
    线程池ThreadPool
    关于sitemesh和freemark在struts2中的一些问题总结
    Google 怎么搜索
    android 设计模式
    android webview
    ios 基础数据类型
    android 常用
    android Handler vs Timer
    网站
  • 原文地址:https://www.cnblogs.com/luolizhi/p/4928970.html
Copyright © 2011-2022 走看看