【发布时间】:2016-02-15 20:44:18
【问题描述】:
我有一个 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.
下面是reduce方法
@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) 排序。 Partitioner 基于 Day 和 GroupingComparator 基于 (Day,id) 因此,reduce 调用应获取按 Id 排序的一天的所有记录。 这里可以直接从reduce写入文件吗?
写入map文件的key应该是升序,reduce方法的多个并行调用(在同一个reducer节点上)会导致key乱序吗?
【问题讨论】:
标签: java hadoop mapreduce bigdata