java—在hadoop作业中输出到多个目录

8gsdolmq  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(234)

我正在尝试处理一些数据并将它们输出到不同的目录。我遵循了本文中接受的答案(使用multipleoutputs):将输出写入不同的文件夹hadoop
但是,当我创建多个目录时,输出文件是空的(目录和文件仍然被创建)。如果我只是删除斜杠(只是同一目录中的不同文件),这些文件包含预期的数据。
任何帮助都将不胜感激。
代码快照:
在主功能中:

while ((ll = br.readLine())!= null)
{
        for (Type v:values)
            MultipleOutputs.addNamedOutput(conf, "./"+ll+"/"+v.toString()+"/"+ll, TextOutputFormat.class, Text.class, NullWritable.class);
}

reduce类:

public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, NullWritable> {
      private MultipleOutputs mos;
      public void configure (JobConf context)
      { 
          mos = new MultipleOutputs(context);
      }
        public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, NullWritable> output, Reporter reporter) throws IOException {
            while (values.hasNext())
            mos.getCollector(key.toString(),
                    reporter).collect(values.next(),
                            NullWritable.get());

        }
      }

传递的密钥将以与namedoutput相同的格式生成。
我只在multipleoutputs中添加了一行,以允许“/”和“.”:

if ((ch=='/') || (ch =='.')) continue;

在checktokenname function.strong文本中

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题