Hadoop - 数据块缓存技术

时间:2013-02-24 01:40:49

标签: caching hadoop mapreduce hdfs

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

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

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

  1. 缓存在计算机STORE(内存中文件缓存)
  2. 的内存中
  3. 缓存在计算机COMPUTE的内存/磁盘中。
  4. 我很确定#1缓存发生了。我想确保是否发生#2之类的事情?从帖子here开始,看起来没有客户端级缓存,因为在刷新缓存之前,在同一台机器上再次需要COMPUTE缓存的块是不太可能的。 / p>

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

    请澄清。

1 个答案:

答案 0 :(得分:3)

HDFS中唯一应用的缓存是操作系统缓存,以最大限度地减少磁盘访问。 因此,如果您从datanode访问一个块,那么如果没有其他任何内容,它可能会被缓存。

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

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