簡體   English   中英

從reduce直接寫入hadoop映射文件

[英]Write directly to a hadoop map file from reduce

我有一個reduce方法,其中根據記錄中的時間戳選擇文件。

數據中的時間戳可以屬於N個不同的日期。(例如N = 5)基於該日期,選擇一個文件,並選擇具有相應路徑的MapFile Writer。 N條路徑有N位作家

 Example : to write record 15-02-2016,Key1,value1 
 A Map File writer object writing to basePath/15-02-2016  will be selected 
and writes key1,value1 using selected writer.

以下是還原方法

 @Override
 protected void reduce(CompositeKey key,Iterable<SomeDataWritable> dataList,
          Reducer<CompositeKey, SomeDataWritable, Text, OutputWritable>.Context context)
          throws IOException, InterruptedException {
          for(SomeDataWritable data:dataList){
            MyMapFileWriter.write(key.getTimeStamp(),key.getId(),new OutPutWritable(data);
           }
}

MyMapFileWriter.write(long timestamp,Text key,OutPutWritable value){
writer=selectWriter(timestamp)// select writer based on timestamp
writer.append(key,value)
}

鍵在(Day,id)上排序。 分區器基於Day,而GroupingComparator基於(Day,id), 因此進行reduce的調用應獲取按ID排序的一天的所有記錄。 在這里可以直接從reduce寫入文件嗎?

寫入映射文件的密鑰應按升序排列,reduce方法的多個並行調用(在同一reducer節點上)會導致密鑰混亂嗎?

即使沒有任何上下文,在reduce作業中寫入write的輸出路徑也會有一些輸出(我在eclipse中以本地模式運行)。這可能是Hadoop Reducer的reduce()編寫的映射器輸出。如何避免這種情況?

我認為直接通過寫入器寫入某些文件不是一個好主意,因為它與與容錯相關的hadoop觀點不一致:您運行作業,某個節點出現故障,hadoop嘗試重新安排作業,但是由於事實上,如果您沒有使用hadoop標准機制來寫文件,它就不會對部分結果失敗做任何事情(您應該自己處理)。

根據“亂序鍵”。 我不確定我是否理解您的問題,但是一個reducer會處理一個鍵的數據,例如,一個reducer可以處理鍵<2016-02-02,id1>的數據,另一個reducer可以處理鍵<2016-02- 01,id2>等。

如果您正確理解FileOutputFormat.setOutputPath(job, OUTPUT_PATH)在配置中指定縮減輸出路徑FileOutputFormat.setOutputPath(job, OUTPUT_PATH) ,以便輸入和輸出路徑將不同。 在這種情況下,您將在OUTPUT_PATH中接收與減速器相關的文件。

暫無
暫無

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

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