簡體   English   中英

多輸出路徑(Java - Hadoop - MapReduce)

[英]Multiple output path (Java - Hadoop - MapReduce)

我做兩個MapReduce作業,我希望第二個作業能夠將我的結果寫入兩個不同的目錄中的兩個不同的文件中。 我想在某種意義上類似於FileInputFormat.addInputPath(..,多輸入路徑),但對於輸出。

我是MapReduce的新手,我有一個特殊性來編寫我的代碼在Hadoop 0.21.0中我在我的Reduce步驟中使用了context.write(..) ,但是我沒有看到如何控制多個輸出路徑.. 。

謝謝你的時間 !

我的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);
    }
}

編輯:所以我在你提到的最后一條評論中做了這個方法,Amar。 我不知道它是否有效,我的HDFS還有其他問題,但在我忘記之前讓我們為了文明而放置我的發現:

http://archive.cloudera.com/cdh/3/hadoop-0.20.2+228/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

  • MultipleOutputs不代替FormatOutputFormat。 使用FormatOutputFormat定義一個輸出路徑,然后可以使用多個MultipleOutputs添加更多輸出路徑。
  • addNamedOutput方法:String namedOutput只是一個描述的詞。
  • 您可以在write方法中實際定義路徑,即String baseOutputPath arg。

所以我在你提到的最后一條評論中做了這個方法,Amar。 我不知道它是否有效,我的HDFS還有其他問題,但在我忘記之前讓我們為了文明而放置我的發現:

http://archive.cloudera.com/cdh/3/hadoop-0.20.2+228/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

MultipleOutputs不代替FormatOutputFormat。 使用FormatOutputFormat定義一個輸出路徑,然后可以使用多個MultipleOutputs添加更多輸出路徑。 addNamedOutput方法:String namedOutput只是一個描述的詞。 您可以在write方法中實際定義路徑,即String baseOutputPath arg。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM