536528395 发表于 2015-2-4 15:50:27

MultipleOutputs 多文件输出问题


我设置了MultipleOutputs 用于多文件输出:
        MultipleOutputs.addNamedOutput(job, "aaa", TextOutputFormat.class,
                                Text.class, IntWritable.class);
                MultipleOutputs.addNamedOutput(job, "bbb", TextOutputFormat.class,
                                Text.class, IntWritable.class);
                MultipleOutputs.addNamedOutput(job, "other", TextOutputFormat.class,
                                Text.class, IntWritable.class);


这个是reduce中的:
                        if(key.toString().startsWith("a")){
                                mos.write("aaa", key, result);
                        }else if(key.toString().startsWith("b")){
                                mos.write("bbb", key, result);
                        }else{
                                mos.write("other", key, result);
                        }


输入路径是两个:
                FileInputFormat.setInputPaths(job, inputPath, inputPath3);


但是我得到的结果不是想要的,因为它并没有把我的两个输入文件合并算阿,是一个一个算的,输出结果:

-rw-r--r--   3 user01 supergroup          0 2015-02-04 15:35 /tmp/output/_SUCCESS
-rw-r--r--   3 user01 supergroup          5 2015-02-04 15:35 /tmp/output/aaa-m-00000
-rw-r--r--   3 user01 supergroup          7 2015-02-04 15:35 /tmp/output/aaa-m-00001
-rw-r--r--   3 user01 supergroup          5 2015-02-04 15:35 /tmp/output/bbb-m-00000
-rw-r--r--   3 user01 supergroup          5 2015-02-04 15:35 /tmp/output/bbb-m-00001
-rw-r--r--   3 user01 supergroup          9 2015-02-04 15:35 /tmp/output/other-m-00000
-rw-r--r--   3 user01 supergroup         14 2015-02-04 15:35 /tmp/output/other-m-00001
-rw-r--r--   3 user01 supergroup          0 2015-02-04 15:35 /tmp/output/part-r-00000


这个 是什么情况阿???难道不能同时有两个输入文件么?

xuanxufeng 发表于 2015-2-4 16:31:56

这个是多输出的
hadoop机制支持多文件输入和输出

xuanxufeng 发表于 2015-2-4 18:44:34

这个应该是自定义文件名称。文件名字是方面,关心的是结果,结果是什么样子的。

desehawk 发表于 2015-2-5 00:08:38

本帖最后由 desehawk 于 2015-2-5 00:10 编辑

xuanxufeng 发表于 2015-2-4 18:44
这个应该是自定义文件名称。文件名字是方面,关心的是结果,结果是什么样子的。
使用不同的方式,mapreduce处理方式不一样。

换成这种方式就好了
FileInputFormat.addInputPath(job, new Path(args));
FileInputFormat.addInputPath(job, new Path(args));
FileInputFormat.addInputPath(job, new Path(args));
FileInputFormat.addInputPath(job, new Path(args));

这种方式可以接收多个路径下的文件输入,但是这些文件都是通过一个Map进行处理

更多参考

hadoop多路径总结

zhujun182104906 发表于 2015-2-6 14:44:05

值得研究的问题
页: [1]
查看完整版本: MultipleOutputs 多文件输出问题