本篇介绍怎样控制reduce的数目。前面观察结果文件,都会发现通常是以part-r-00000 形式出现多个文件,事实上这个reducer的数目有关系。reducer数目多,结果文件数目就多。

在初始化job的时候。是能够设置reducer的数目的。example4在example的基础上做了改动。改动了pom.xml。使得结束一个參数作为reducer的数目。改动了LogJob.java的代码,作为设置reducer数目。

  1. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>org.freebird</groupId>
  4. <artifactId>mr1_example4</artifactId>
  5. <packaging>jar</packaging>
  6. <version>1.0-SNAPSHOT</version>
  7. <name>mr1_example4</name>
  8. <url>http://maven.apache.org</url>
  9. <dependencies>
  10. <dependency>
  11. <groupId>org.apache.hadoop</groupId>
  12. <artifactId>hadoop-core</artifactId>
  13. <version>1.2.1</version>
  14. </dependency>
  15. </dependencies>
  16. <build>
  17. <plugins>
  18. <plugin>
  19. <groupId>org.codehaus.mojo</groupId>
  20. <artifactId>exec-maven-plugin</artifactId>
  21. <version>1.3.2</version>
  22. <executions>
  23. <execution>
  24. <goals>
  25. <goal>exec</goal>
  26. </goals>
  27. </execution>
  28. </executions>
  29. <configuration>
  30. <executable>hadoop</executable>
  31. <arguments>
  32. <argument>jar</argument>
  33. <argument>target/mr1_example4-1.0-SNAPSHOT.jar</argument>
  34. <argument>org.freebird.LogJob</argument>
  35. <argument>/user/chenshu/share/logs</argument>
  36. <argument>1</argument>
  37. </arguments>
  38. </configuration>
  39. </plugin>
  40. </plugins>
  41. </build>
  42. </project>

LogJob.java代码:

  1. import org.apache.hadoop.io.IntWritable;
  2. import org.apache.hadoop.fs.Path;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Job;
  6. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  7. import org.freebird.reducer.LogReducer;
  8. import org.freebird.mapper.LogMapper;
  9. import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
  10. import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
  11. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  12. import org.apache.hadoop.fs.FileSystem;
  13. import java.io.IOException;
  14.  
  15. public class LogJob {
  16.  
  17. public static void main(String[] args) throws Exception {
  18. String inputPath = args[0];
  19. if (inputPath.endsWith("/")) {
  20. inputPath = inputPath.substring(0, inputPath.length() -1);
  21. }
  22. System.out.println("args[0] indicates input folder path, the last / will be removed if it exists:" + inputPath);
  23. String outputPath = inputPath + "/output";
  24. System.out.println("output folder path is:" + outputPath);
  25.  
  26. int numReducer = Integer.parseInt(args[1]);
  27. System.out.println("reducer number is: " + args[1]);
  28.  
  29. Configuration conf = new Configuration();
  30. Job job = new Job(conf, "sum_did_from_log_file");
  31. job.setJarByClass(LogJob.class);
  32.  
  33. job.setMapperClass(org.freebird.mapper.LogMapper.class);
  34.  
  35. job.setReducerClass(org.freebird.reducer.LogReducer.class);
  36. job.setNumReduceTasks(numReducer);
  37.  
  38. job.setOutputKeyClass(Text.class);
  39. job.setOutputValueClass(IntWritable.class);
  40.  
  41. Path path1 = new Path(inputPath);
  42. Path path2 = new Path(outputPath);
  43.  
  44. removeFolder(path2, conf);
  45.  
  46. MultipleOutputs.addNamedOutput(job, "result", TextOutputFormat.class, Text.class, IntWritable.class);
  47.  
  48. FileInputFormat.addInputPath(job, path1);
  49. FileOutputFormat.setOutputPath(job, path2);
  50.  
  51. System.exit(job.waitForCompletion(true) ? 0 : 1);
  52. }
  53.  
  54. private static void removeFolder(Path path, Configuration conf) throws IOException {
  55. FileSystem fs = path.getFileSystem(conf);
  56. if (fs.exists(path)) {
  57. fs.delete(path);
  58. }
  59. }
  60. }

执行结果,通过观察jobtracker。的确reducer数目为1了。

而且结果文件也变成了仅仅有一个:

  1. [chenshu@hadoopMaster example4]$ hdfs dfs -ls /user/chenshu/share/logs/output/
  2. 14/10/03 14:18:35 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. Found 4 items
  4. -rw-r--r-- 3 chenshu chenshu 0 2014-10-03 12:53 /user/chenshu/share/logs/output/_SUCCESS
  5. drwxr-xr-x - chenshu chenshu 0 2014-10-03 12:52 /user/chenshu/share/logs/output/_logs
  6. -rw-r--r-- 3 chenshu chenshu 0 2014-10-03 12:53 /user/chenshu/share/logs/output/part-r-00000
  7. -rw-r--r-- 3 chenshu chenshu 4391668 2014-10-03 12:53 /user/chenshu/share/logs/output/result-r-00000

MapReduce 编程 系列九 Reducer数目的更多相关文章

  1. 学习ASP.NET Core Razor 编程系列九——增加查询功能

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  2. 学习ASP.NET Core Blazor编程系列九——服务器端校验

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  3. 【原创】MapReduce编程系列之二元排序

    普通排序实现 普通排序的实现利用了按姓名的排序,调用了默认的对key的HashPartition函数来实现数据的分组.partition操作之后写入磁盘时会对数据进行排序操作(对一个分区内的数据作排序 ...

  4. MapReduce编程系列 — 6:多表关联

    1.项目名称: 2.程序代码: 版本一(详细版): package com.mtjoin; import java.io.IOException; import java.util.Iterator; ...

  5. MapReduce编程系列 — 5:单表关联

    1.项目名称: 2.项目数据: chile    parentTom    LucyTom    JackJone    LucyJone    JackLucy    MaryLucy    Ben ...

  6. MapReduce编程系列 — 4:排序

    1.项目名称: 2.程序代码: package com.sort; import java.io.IOException; import org.apache.hadoop.conf.Configur ...

  7. MapReduce编程系列 — 3:数据去重

    1.项目名称: 2.程序代码: package com.dedup; import java.io.IOException; import org.apache.hadoop.conf.Configu ...

  8. MapReduce编程系列 — 2:计算平均分

    1.项目名称: 2.程序代码: package com.averagescorecount; import java.io.IOException; import java.util.Iterator ...

  9. MapReduce编程系列 — 1:计算单词

    1.代码: package com.mrdemo; import java.io.IOException; import java.util.StringTokenizer; import org.a ...

随机推荐

  1. 15.lambda表达式

    #include <iostream> #include <array> using namespace std; //解决函数怀孕现象 //[](){} //[] =引用,只 ...

  2. 关于Promise的详细总结

    1. 异步回调 1.1 回调地狱 在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱 1.2 并行结果 如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完 ...

  3. Mine Vison base on VC++ and procilica Gige Vison SDK

    This is my first vision base on VC++6.0. I am so happy to record this time i succesfully create it b ...

  4. NYOJ448_寻找最大数【贪心】

    寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比方当n=920813467185 ...

  5. 使用 LaTeX 绘制 PGM(Probabilistic Graphical Models)中的贝叶斯网络(bayesian networks)

    Software for drawing bayesian networks (graphical models) 这里需要调用 latex 中的绘图库:TikZ and PGF. 注意,下述 tex ...

  6. javascript预解释中的机制

    预解释是一种毫无节操的机制(自从学了预解释,从此节操是路人) in:‘num’ in window 判断num是否为window这个对象的一个属性,是的话返回true,不是返回false 1.预解释的 ...

  7. 小程序踩坑记- tabBar.list[3].selectedIconPath 大小超过 40kb

    重新启动微信小程序编辑器的时候遇到了这样的一个问题: tabBar.list[3].selectedIconPath 大小超过 40kb 微信小程序开发的过程之中总会出现这样或者那样的错误,需要我们耐 ...

  8. promis:异步编程

    promise对象用于延迟计算和异步计算:一个promise对象代表着一个还未完成,但预期将来完成的操作 Image.png Image.png 打印结果如下: <!DOCTYPE html&g ...

  9. Windows下合并tar分卷

    如有例如以下几个tar分卷:logs.tar.gza1.logs.tar.gza2.logs.tar.gza3.在Windows下怎样进行合并呢? 按"win+r"键在弹出的输入框 ...

  10. VMware Ubuntu安装具体过程

    不是每个程序猿都必须玩过linux,仅仅是博主认为如今的非常多server都是linux系统的,而自己属于那种前端也搞.后台也搞,对框架搭建也感兴趣,可是非常多生产上的框架和工具都是安装在server ...