Я выполняю две задания MapReduce, и я хочу, чтобы второе задание могло записать мой результат в два разных файла в двух разных каталогах. Я хотел бы что-то подобное FileInputFormat.addInputPath (.., несколько путей ввода) в некотором смысле, но для вывода.Несколько выходных путей (Java - Hadoop - MapReduce)
Я совершенно новой для MapReduce, и у меня есть своя специфика, чтобы написать свой код в Hadoop 0.21.0 Я использую context.write(..)
в моем Reduce шаг, но я не вижу, как управлять несколькими путями вывода ...
Спасибо за ваше время!
My reduceCode с моей первой работы, чтобы показать вам, что я знаю только, как выводить (он входит в файл /../part*. Но теперь я хотел бы указать два файла-прецизии для разных выход, в зависимости от ключа):
public static class NormalizeReducer extends Reducer<LongWritable, NetflixRating, LongWritable, NetflixUser> {
public void reduce(LongWritable key, Iterable<NetflixRating> values, Context context) throws IOException, InterruptedException {
NetflixUser user = new NetflixUser(key.get());
for(NetflixRating r : values) {
user.addRating(new NetflixRating(r));
}
user.normalizeRatings();
user.reduceRatings();
context.write(key, user);
}
}
EDIT: поэтому я сделал метод в последний комментарий, как вы упомянули, Амар. Я не знаю, если это работает, у меня есть другая проблема с моим HDFS, но прежде, чем я забываю давайте здесь мои открытия для цивилизации:
- MultipleOutputs не действует на месте FormatOutputFormat. Вы определяете один выходной путь с помощью FormatOutputFormat, а затем вы можете добавить еще много с несколькими MultipleOutput.
- addNamedOutput method: String namedOutput - это просто слово, которое описывает.
- Вы определяете путь, фактически используемый в методе write, аргумент String baseOutputPath.
checkout 'MultipleOutputs': http://archive.cloudera.com/cdh/3/hadoop-0.20.2+228/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html – Amar
Похож, что Это! Я не знаю, как я этого не нашел ... Я попробую это спасибо! – Hermes
Вопрос еще: мы можем только добавить слово, чтобы описать путь, скажем, документацию, почему это так? Почему мы не можем поставить полный путь, чтобы иметь возможность выводить в разных каталогах? – Hermes