mapreduce中实现多路径输出主要使用MulitipleOutputs类
通过两个例子可以掌握
输入样例 mulitipleInput.txt
1 | file1 001 |
输出:
file1和file3开头的记录归到一个文件下
file2和file3开头的记录归到一个文件下
代码
1 | import java.io.IOException; |
结果
1 | hadoop fs -cat /user/test/wordTest/mulitipleOutput/file1-m-00000 |
如果想把file1和file2的内容放入不同的目录下,可以通过指定baseOutputPath,将file1开头的文件放在同一个目录中管理。
将mos.write("file1", value, NullWritable.get());
和mos.write("file2", value, NullWritable.get());
改为mos.write("file1", value, NullWritable.get(),"file1/part");
和mos.write("file2", value, NullWritable.get(),"file2/part");
或mos.write(value, NullWritable.get(),"file1/part");
和mos.write(value, NullWritable.get(),"file2/part");
可以看到输出结果
1 | hadoop fs -ls /user/test/wordTest/mulitipleOutput |
指定baseOutputPath输出路径和输出文件名直接按照baseOutPutPath指定,但是默认输出文件名后缀会跟上-r-00000,如果想更改可以继承FileOutputFormat重写RecordWriter实现。