gpt4 book ai didi

java - 在 hadoop 的迭代作业中,在每个拆分的 mapreduce 输入文件上附加相同的字符串(先前的结果)

转载 作者:可可西里 更新时间:2023-11-01 17:01:12 25 4
gpt4 key购买 nike

我是 Hadoop 新手,我正在编写一个迭代 MapReduce 作业。

我知道使用 Hadoop,从一个大数据集开始,它将被拆分成小文件,然后将它们作为输入发送到不同机器上的 mapfunction。

我只是成功地将 MapReduce 的结果追加到输出文件的末尾,但是在这种迭代作业中,这个结果将只发送到一台机器。

所以我想将结果附加到发送到每台机器的每个拆分文件中,这样任何机器都可以看到以前的结果。

我该怎么做?

最佳答案

在您的 Map 方法中,您可以将输出附加到一个常见的 HDFS 文件,而不是写入上下文对象。但是如果多个映射任务试图追加文件,你会得到错误。

解决方法:

  1. 在 MR 作业的每次迭代后,将输出附加到临时文件中tmp 目录。
  2. 将此临时文件移动到 hdfs(使用 Java Hadoop filestatus API)
  3. 在下一次迭代中,将这个加载到 hdfs 中的临时文件添加到分布式缓存中。
  4. 从map任务中读取分布式缓存文件。

如果您需要进一步的帮助,请告诉我。

更新临时文件逻辑

 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 以进行分布式缓存。

关于java - 在 hadoop 的迭代作业中,在每个拆分的 mapreduce 输入文件上附加相同的字符串(先前的结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23868022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com