gpt4 book ai didi

file - Map在Hadoop下运行时应该把临时文件放在哪里

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

我在 SLES 10 (SUSE) 下运行 Hadoop 0.20.1。

我的 map task 获取一个文件并生成更多文件,然后我从这些文件生成我的结果。我想知道我应该把这些文件放在哪里,这样性能才会好并且没有冲突。如果 Hadoop 可以自动删除该目录,那就太好了。

现在,我正在使用临时文件夹和任务 ID 创建一个唯一的文件夹,然后在该文件夹的子文件夹中工作。

reduceTaskId = job.get("mapred.task.id");
reduceTempDir = job.get("mapred.temp.dir");
String myTemporaryFoldername = reduceTempDir+File.separator+reduceTaskId+ File.separator;
File diseaseParent = new File(myTemporaryFoldername+File.separator +REDUCE_WORK_FOLDER);

这种方法的问题是我不确定它是否是最佳的,而且我必须删除每个新文件夹,否则我就会开始用完空间。谢谢阿金塔约

(编辑)我发现在 map 生命周期之后保留您不想要的文件的最佳位置是 job.get("job.local.dir"),它提供了一个路径,本地图任务完成。我不确定删除是基于每个键还是针对每个 tasktracker 完成的。

最佳答案

该方法的问题在于,排序和混洗会将您的数据从本地化的位置移开。

我不太了解你的数据,但分布式缓存可能适合你

${mapred.local.dir}/taskTracker/archive/:分布式缓存。该目录包含本地化的分布式缓存。因此本地化分布式缓存在所有任务和作业之间共享

http://www.cloudera.com/blog/2008/11/sending-files-to-remote-task-nodes-with-hadoop-mapreduce/

“MapReduce 程序通常要求每个 map 或 reduce 任务在执行前读取一个或多个文件。例如,您可能有一个查找表需要在处理一组记录之前进行解析。为了解决这种情况,Hadoop 的 MapReduce 实现包括一个分布式文件缓存,它将管理将您的文件复制到任务执行节点。

Hadoop 0.7.0引入了DistributedCache;有关其起源的更多详细信息,请参阅 HADOOP-288。 DistributedCache 有大量现有文档:请参阅 Hadoop FAQ、MapReduce 教程、Hadoop Javadoc 和 Hadoop Streaming 教程。阅读现有文档并了解如何使用 DistributedCache 后,再回来。”

关于file - Map在Hadoop下运行时应该把临时文件放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3375096/

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