Запись в несколько папок в hadoop?

Я пытаюсь отделить свой вывод от редуктора в разные папки..

My dirver has the following code:
 FileOutputFormat.setOutputPath(job, new Path(output));
            //MultipleOutputs.addNamedOutput(job, namedOutput, outputFormatClass, keyClass, valueClass)
            //MultipleOutputs.addNamedOutput(job, namedOutput, outputFormatClass, keyClass, valueClass)
            MultipleOutputs.addNamedOutput(job, "foo", TextOutputFormat.class, NullWritable.class, Text.class);
            MultipleOutputs.addNamedOutput(job, "bar", TextOutputFormat.class, Text.class,NullWritable.class);
            MultipleOutputs.addNamedOutput(job, "foobar", TextOutputFormat.class, Text.class, NullWritable.class);

And then my reducer has the following code:
mos.write("foo",NullWritable.get(),new Text(jsn.toString()));
mos.write("bar", key,NullWritable.get());
mos.write("foobar", key,NullWritable.get());

But in the output, I see:

output/foo-r-0001
output/foo-r-0002
output/foobar-r-0001
output/bar-r-0001


But what I am trying is :

output/foo/part-r-0001
output/foo/part-r-0002
output/bar/part-r-0001

выход / foobar / часть-r-0001

Как это сделать? Спасибо

1 ответов


Если вы имеете в виду это MultipleOutputs, самый простой путь был бы сделать одно из следующего от вас редуктор --

  1. использование именованного вывода с базовым выходным путем. см. эту функцию.
  2. без именованного вывода и с использованием только базового выходного пути, см. эту функцию

в вашем случае это пункт 1, поэтому, пожалуйста, измените следующие --

mos.write("foo",NullWritable.get(),new Text(jsn.toString()));
mos.write("bar", key,NullWritable.get());
mos.write("foobar", key,NullWritable.get());

to,

mos.write("foo",NullWritable.get(),new Text(jsn.toString()), "foo/part");
mos.write("bar", key,NullWritable.get(), "bar/part");
mos.write("foobar", key,NullWritable.get(), "foobar/part");

здесь "foo / part", "бар/часть" и "foobar / часть" соответствует пути baseOutputPath. Следовательно, каталоги foo, bar и foobar будут созданы и внутри этого часть-r-xxxxx файлы.

вы также можете попробовать пункт 2 выше, который на самом деле не нуждается в именованном выходе.

пожалуйста, свяжитесь со мной для дальнейшего уточнения, если это необходимо.