【问题标题】:Hadoop - data block caching techniquesHadoop——数据块缓存技术
【发布时间】:2013-02-24 01:40:49
【问题描述】:

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

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

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

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

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

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

请澄清。

【问题讨论】:

    标签: caching hadoop mapreduce hdfs


    【解决方案1】:

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

    在您的客户端,这取决于您如何处理该块。如果直接写到磁盘,也很有可能是你的客户端操作系统缓存了。

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

    【讨论】:

    • 感谢您的澄清。