Hadoop多文件输出方案

时间:2015-10-23 04:23:25

标签: hadoop

我创建了一个程序,它处理两个数据文件,一个包含客户数据,另一个包含事务数据,我在此数据文件上应用了reduce连接并处理了文件和输出之类的 客户名称交易总金额 Amit Kumar 4 120000000 Kawaldeep Sing 5 20000000 Sanosh singh 6 10000000

现在我希望当每个名称的程序运行输出进入seprate文件时,如果一行包含有关Amit Kumar的数据,那么这些数据将进入名为Amit的文件,类似于其他记录。

如果上述情况可能,那么如果作业每5分钟运行一次,那么我们如何将输出附加到同一个文件。

请帮我解决这个问题。

谢谢&看待 阿米特

2 个答案:

答案 0 :(得分:0)

让Amit,Kawaldeep等名称成为地图制作者的关键输出。因此,reducer处理一个键映射器输出的整个数据,并使reducer输出也是同一个键。我们可以覆盖MultipleTextOutputFormat类,为每个键提供单独的输出文件。以下代码可能有用。

    /**
     * Create output files based on the output record's key name.
     */
    static class KeyBasedMultipleTextOutputFormat
                 extends MultipleTextOutputFormat<Text, Text> {
        @Override
        protected String generateFileNameForKeyValue(Text key, Text value, String name) {
            return key.toString() + "/" + name;
        }
    }

在工作班中

jobConf.setOutputFormat(KeyBasedMultipleTextOutputFormat.class);

答案 1 :(得分:0)

寻找:

org.apache.hadoop.mapreduce.lib.output.MultipleOutputs

https://hadoop.apache.org/docs/r2.6.1/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

用于追加文件: merge output files after reduce phase

希望它有用。