MapReduce程序默认的输出文件个数:
首先,根据setNumReduceTasks(int num)这个方法,
其次,根据Map的输出文件个数。
一般情况下,同一个key的数据,可能会被分散到不同的输出文件中。倘若我们要对某一个特定的key的所有value值进行遍历,则需要将包含该key的所有文件作为输入文件。当数据比较庞大时,这样的操作会浪费资源。如果同一个Key的所有的value值都会被分配到同一个文件中,就会比较理想。
在Hadoop-core包中,有个类MultiplyOutputs可以实现以上功能(其实就是在reduce中加一两句话,其他不变)。代码如下:
package io; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; import java.io.IOException; public class MultipleOut extends Configured implements Tool { static class Map extends Mapper<LongWritable, Text, Text, Text> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); int index = line.indexOf(" "); if (index != -1) { context.write(new Text(line.substring(0, index)), new Text(value.toString().substring(index + 1))); } } } // 只需要在reduce中添加几句代码,其他部分不需要改动 static class Reduce extends Reducer<Text, Text, Text, Text> { @Override protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { MultipleOutputs mo = new MultipleOutputs(context); for (Text val : values) { //key.toString():表示输出文件名以Key命名,注意是相对路径 mo.write(key, val, key.toString() + "/"); } //一定要close,否则无数据 mo.close(); } } @Override public int run(String[] strings) throws Exception { String path = "你的输入路径"; if (strings.length != 1) { System.out.println("input:" + path); System.out.print("arg:<out>"); return 1; } Configuration conf = getConf(); Job job = new Job(conf, "MultipleOut"); job.setJarByClass(MultipleOut.class); job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job, new Path(path)); FileOutputFormat.setOutputPath(job, new Path(strings[0])); boolean success = job.waitForCompletion(true); return success ? 0 : 1; } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); int rst = ToolRunner.run(conf, new MultipleOut(), args); System.exit(rst); } }
结果如图片所示,目录1,2,3,4,5是五个Key。
相关推荐
求所有文件中数值的最大三个值( Top 3 ),并按降序输出。MR编程mapper,reducer,combiner类的源代码
采用Bland-Altman分析评价PC MR法和MR心脏容积法所测每搏输出量的一致性,郭立,郭皓,目的:探讨Bland-Altman分析在评价PC MR法和MR心脏容积法测量每搏输出量(SV)的一致性的应用。方法:对22例正常志愿者分别采用...
MITSUBISHI MR-C伺服系统输入输出界面pdf,MITSUBISHI MR-C伺服系统输入输出界面
07.mr编程案例--替换默认的文本输入输出组件为sequence文件输入输出组件.mp4
MR-JET-G实现CC-LINK IE Field Basic通信.pdf
mr-library 是一个专为嵌入式系统设计的轻量级框架,模块化的软件架构充分考虑了嵌入式系统的资源和性能要求。 通过提供标准化的设备管理等,极大地简化了嵌入式应用的开发难度,帮助开发者快速构建嵌入式应用程序。...
mr.part1mr.part1mr.part1
一个完整检查的MR核磁图像,6个序列
Mr2.js 是一个javascript客户端,内置了mr2的免费服务器,可以帮助您将本地服务器暴露到外部网络中
可以通过一次查找从多个手册中查找出希望搜索的信息 (手册横向可以通过手册内的链接参照其他手册 可以通过产品插图的各部件阅览希望了解的硬件规格可以将经常浏览的信息添加到收藏夹中 可以将样本程序复制到工程工具...
流水线项目,16个MR-JE-C电机,为了加快编程速度,特意做的一个FB功能块,内部采用局部变量+全局缓冲区的方式进行编程,多次调用不冲突! 适用于Q系列PLC和MR-JE-C的运动控制。 FB功能块包含回原位、PV速度模式、PP...
FX1N-60MR手册
MR处理HDFS日志样例
该程序包含的知识是对C文件的打开与关闭(运用fopen函数和fclose函数来打开关闭文件,并把一个文件里的数据提取到另一个文件里去),里面的解析希望能有助于大家理解该代码以及C文件的基础知识
三菱伺服软件MR(MR Configurator2)让用户可以进行MR-J3,J4,JE系列伺服的调试,中文版的软件界面,在MR Configurator2 中,可以简单的进行监视显示、伺服放大器的调整、参数的写入或读取等。使用起来相对简单方便 ...
GX Works3的MR-JE-C的CC-LINK IE Field Basic通信_描述文件
MR-Configurator2 mr je
2.把windows运行Hadoop的一个系统文件hadoop.dll放到C:\Windows\System32中 3.将hadoop-eclipse-plugin-2.8.5.jar放到eclipse的插件文件夹内(我的: E:\cxj\eclipse\plugins) 4.启动eclipse,检查插件是否运行...
博客配套文件,详细演示了如何通过MR程序的方式bulkload数据到hbase,代码可直接用于生产环境。
MR13是岛电公司2000年推出的0.3级9段可编程PID调节器,既可作为独立的三回路,又可实现多温区以及大滞后系统的串级调节,带模拟遥控输入/输出及RS232/485通讯口.四排四位显示,三组定值PID参数群,九组程序PID参数群,...