我是Hadoop的新手,我正在编写一个迭代的MapReduce作业。
我知道,对于Hadoop,从一个大型数据集开始,它将被拆分为小文件,而不是将它们作为输入发送到不同机器上的mapfunction。
我只是成功地将MapReduce的结果附加到输出文件的末尾,但是通过迭代作业的方式,这个结果将只发送到一台机器。
所以我想将结果附加到发送到每台机器的EACH分割文件中,这样任何机器都可以看到之前的结果。
我该怎么做?
答案 0 :(得分:1)
在Map方法中,您可以将输出附加到一个常见的HDFS文件,而不是写入上下文对象。但是,如果多个地图任务尝试附加文件,您将收到错误。
解决方法:
如果您需要进一步的帮助,请与我们联系。
更新临时文件逻辑
public void appendtempdate(String tempfile,String data)
{
try
{
File temp = new File(tempfile);
if(!temp.exists())
{
temp.createNewFile();
}
FileWriter fw= new FileWriter(temp.getName(),true);
BufferedWriter bw= new BufferedWriter(fw);
bw.write(data);
bw.close();
}
catch(Execption e)
{
}
}
调用此方法并将临时文件移至HDFS以进行分布式缓存。