简化的 MapReduce 驱动程序:默认值显式设置
来源:互联网 发布:js 对象访问器 编辑:程序博客网 时间:2024/05/17 08:57
即便删除如下加粗的部分,程序还是能跑起来,A/B程序的运行效果是一样的。
public class MinimalMapReduceWithDefaults extends Configured implements Tool {@Overridepublic int run(String[] args) throws IOException {Job job = JobBuilder.parseInputAndOutput(this, getConf(), args);if ( job == null) {return -1;}job.setInputFormat(TextInputFormat.class);job.setMapperClass(Mapper.class);job.setMapOutputKeyClass(LongWritable.class);job.setMapOutputValueClass(Text.class);job.setPartitionerClass(HashPartitioner.class);job.setNumReduceTasks(1);job.setReducerClass(Reducer.class);job.setOutputKeyClass(LongWritable.class);job.setOutputValueClass(Text.class);return job.waitForCompletion(true) ? 0 : 1;}public static void main(String[] args) throws IOException {int exitCode = ToolRunner.run(new MinimalMapReduceWithDefaults(), args);System.exit(exitCode);}}
1. 代码说明:
几乎所有的驱动程序都有输入和输出2个参数,所以此处简化代码,新建了JobBuilder类。
1) JobBuilder.java
public static Job parseInputAndOutput(Tool tool, Configuration conf, String[] args) {if (args.length != 2) {printUsage(tool, "<input> <output>");return null;}Job job = Job.getInstance(conf, "Demo");job.setJarByClass(tool.getClass);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));return job;}public static void printUsage(Tool tool, String extraArgsUsage) {System.err.printf("Usage: %s [genericOptions] %s\n\n", tool.getClass().getSimpleName(), extraArgsUsage);GenericOptionsParser.printGenericCommandUsage(System.err);}
2) 默认的输入格式是 TextInputFormat,产生的键类型是LongWritable(文件中每行开始的偏移量,由此可保证唯一性)
3)默认的Partitioner是 HashPartitioner,它对每条记录的键进行哈希操作来决定该条记录属于哪个分区,每个分区对应一个Reducer任务,所以:分区数等于Reducer数!
public class HashPartitioner<K, V> extends Partitioner<K, V> {public int getPartition(K key, V value, int numPartitions) {return ((key.hashCode() & Integer.MAX_VALUE) % numPartitions);}
4)默认情况下,只有一个Reducer,所以只有一个分区,numPartions=1,由此可得上面getPartition()的结果总是等于0,所以设不设置Partitioner无关紧要了。
5)你可能注意到并没有设置Mapper数量。原因是:Map任务数量等于输入文件被划分成的分片数,取决于输入文件的大小和文件块的大小。
先记录到这里,做一个知识收纳~
阅读全文
0 0
- 简化的 MapReduce 驱动程序:默认值显式设置
- 简化TD的操作——提交Bug时的默认值和关联值的设置
- 参数默认值的设置
- MapReduce: 大规模集群上的简化数据处理
- 设置文本域的默认值
- 设置Struts2的表单默认值
- 设置文本域的默认值
- doubleselect标签的默认值设置
- oracle 设置日期的默认值
- Nhobernate设置默认值的问题
- s:textfiled 默认值的设置
- Android系统默认值的设置
- Android系统默认值的设置
- oracle 设置日期的默认值
- Android系统默认值的设置
- Android系统默认值的设置
- Android系统默认值的设置
- Android系统默认值的设置
- display:flex垂直居中
- 图的存储结构——邻接表
- 【C++11】新特性——引入nullprt
- EmbeddedViewRef
- JNat外网访问时出现localhost地址怎么办
- 简化的 MapReduce 驱动程序:默认值显式设置
- 《Spring AOP学习总结之二—XML配置实现AOP功能》
- 如何用Puppet和Augeas管理Linux配置
- java接口思想
- 练习赛A题
- C# 如何给Word文档设置背景颜色和背景图片
- 树状数组简单总结
- STM32 串口IAP
- EventBus3.0的使用