1

我正在运行一些实验来基准测试(通过 map-reduce)读取和处理存储在 HDFS 上的具有不同参数的数据所需的时间。我使用 pig 脚本来启动 map-reduce 作业。由于我经常使用同一组文件,因此我的结果可能会因为文件/块缓存而受到影响。

我想了解在 map-reduce 环境中使用的各种缓存技术。

假设存储在 HDFS 上的文件foo(包含一些要处理的数据)占用1HDFS 块并存储在 machine 中STORE。在 map-reduce 任务期间,机器COMPUTE通过网络读取该块并对其进行处理。缓存可以发生在两个级别:

  1. 缓存在机器内存中STORE(内存中文件缓存)
  2. 缓存在机器的内存/磁盘中COMPUTE

我很确定#1缓存会发生。我想确定是否会发生类似的#2事情?从这里的帖子来看,似乎没有进行客户端级别的缓存,因为COMPUTE在刷新缓存之前,同一台机器上不太可能再次需要缓存的块。

此外,hadoop 分布式缓存是否仅用于将任何特定于应用程序的文件(不是特定于任务的输入数据文件)分发到所有任务跟踪器节点?还是任务特定的输入文件数据(如foo文件块)缓存在分布式缓存中?我假设local.cache.size相关参数只控制分布式缓存。

请澄清。

4

1 回答 1

3

在 HDFS 中应用的唯一缓存是操作系统缓存以最小化磁盘访问。所以如果你从一个数据节点访问一个块,如果那里没有其他事情发生,它很可能会被缓存。

在您的客户端,这取决于您对块执行的操作。如果您直接将其写入磁盘,那么您的客户端操作系统也很可能会将其缓存。

分布式缓存仅适用于需要在您的作业启动任务的集群中分布的 jar 和文件。因此,这个名字有点误导,因为它什么都没有“缓存”。

于 2013-02-24T10:13:14.990 回答