gpt4 book ai didi

hadoop - 在 Hadoop 分布式缓存中重用文件

转载 作者:可可西里 更新时间:2023-11-01 14:34:20 26 4
gpt4 key购买 nike

我想知道是否有人可以解释分布式缓存在 Hadoop 中的工作原理。我多次运行一个作业,每次运行后我注意到每个节点上的本地分布式缓存文件夹的大小都在增加。

有没有办法让多个作业在分布式缓存中重复使用同一个文件?还是分布式缓存仅在任何单个作业的生命周期内有效?

我感到困惑的原因是 Hadoop 文档提到“DistributedCache tracks modification timestamps of the cache files”,所以这让我相信如果时间戳没有改变,那么它应该不需要重新 -将文件缓存或重新复制到节点。

我正在使用以下方法成功地将文件添加到分布式缓存:

DistributedCache.addFileToClassPath(hdfsPath, conf);

最佳答案

DistributedCache 使用引用计数来管理缓存。 org.apache.hadoop.filecache.TrackerDistributedCacheManager.CleanupThread负责清理引用计数为0的CacheDirs,每分钟检查一次(默认周期为1分钟,可以通过"mapreduce.tasktracker.distributedcache.checkperiod").

当作业完成或失败时,JobTracker 将向 TaskTracker 发送一个 org.apache.hadoop.mapred.KillJobAction。然后,如果 TaskTracker 收到 KillJobAction,它会将操作放入 tasksToCleanup。在 TaskTracker 中,有一个名为 taskCleanupThread 的后台线程,它从 tasksToCleanup 获取操作并执行清理工作。对于 KillJobAction,它将调用 purgeJob 来清理作业。在此方法中,它将减少此作业使用的引用计数 (rjob.distCacheMgr.release();)。

以上分析基于hadoop-core-2.0.0-mr1-cdh4.2.1-sources.jar。我还检查了 hadoop-core-0.20.2-cdh3u1-sources.jar,发现这两个版本之间存在细微差别。例如,0.20.2-cdh3u1 中没有 org.apache.hadoop.filecache.TrackerDistributedCacheManager.CleanupThread。当初始化一个 Job 时,TrackerDistributedCacheManager 会检查是否有足够的空间来放置这个 Job 的新缓存文件。如果不是,它将删除引用计数为 0 的缓存。

如果你使用的是cdh4.2.1,你可以增加“mapreduce.tasktracker.distributedcache.checkperiod”让清理工作延迟。那么多个Jobs使用同一个分布式缓存的概率就增加了。

如果您使用的是 cdh3u1,您可以增加缓存大小的限制(“local.cache.size”,默认为 10G)和缓存的最大目录(“mapreduce.tasktracker.cache.local.numberdirectories”,默认值为 10000)。这也适用于cdh4.2.1。

关于hadoop - 在 Hadoop 分布式缓存中重用文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538280/

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