Caminho de saída múltiplo (Java - Hadoop - MapReduce)
Eu faço dois trabalhos de MapReduce, e eu quero que o segundo trabalho seja capaz de escrever o meu resultado em dois arquivos diferentes, em dois diretórios diferentes. Eu gostaria de algo semelhante ao FileInputFormat.addInputPath (.., caminho de entrada múltipla) em um sentido, mas para a saída.
Sou completamente novo no MapReduce, e tenho uma especificidade para escrever meu código no Hadoop 0.21.0 que usocontext.write(..)
no meu passo Reduzir, mas não vejo como controlar vários caminhos de saída ...
Obrigado pelo seu tempo !
Meu reduceCode do meu primeiro trabalho, para mostrar que eu só sei como saída (ele entra em um arquivo /../part*. Mas agora o que eu gostaria é poder especificar dois arquivos precises para saída diferente, dependendo a chave) :
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);
}
}
EDITAR: então eu fiz o método no último comentário como você mencionou, Amar. Eu não sei se funciona, eu tenho outro problema com o HDFS, mas antes que eu esqueça, vamos colocar aqui minhas descobertas para o bem da civilização:
MultipleOutputs NÃO age no lugar de FormatOutputFormat. Você define um caminho de saída com FormatOutputFormat e, em seguida, pode adicionar muito mais com múltiplos MultipleOutputs.addNamedOutput method: String namedOutput é apenas uma palavra que descreve.Você define o caminho, na verdade, no método write, o argumento String baseOutputPath arg.