我正在进行一些实验来测试所需的时间(通过map-reduce)来读取和处理存储在具有不同参数的HDFS上的数据。我使用pig脚本启动map-reduce作业。由于我经常使用同一组文件,因为文件/块缓存,我的结果可能会受到影响。
我想了解map-reduce环境中使用的各种缓存技术。
假设存储在HDFS上的文件foo
(包含一些要处理的数据)占用1
HDFS块,它将存储在计算机STORE
中。在map-reduce任务期间,计算机COMPUTE
通过网络读取该块并对其进行处理。缓存可以在两个级别进行:
STORE
(内存中文件缓存)COMPUTE
的内存/磁盘中。我很确定#1
缓存发生了。我想确保是否发生#2
之类的事情?从帖子here开始,看起来没有客户端级缓存,因为在刷新缓存之前,在同一台机器上再次需要COMPUTE
缓存的块是不太可能的。 / p>
此外,hadoop分布式缓存是否仅用于将任何特定于应用程序的文件(不是任务特定的输入数据文件)分发给所有任务跟踪器节点?或者是特定于任务的输入文件数据(如foo
文件块)缓存在分布式缓存中?我假设local.cache.size
和相关参数仅控制分布式缓存。
请澄清。
答案 0 :(得分:3)
HDFS中唯一应用的缓存是操作系统缓存,以最大限度地减少磁盘访问。 因此,如果您从datanode访问一个块,那么如果没有其他任何内容,它可能会被缓存。
在您的客户端,这取决于您对块执行的操作。如果直接将其写入磁盘,则客户端操作系统很可能会将其缓存。
分布式缓存仅适用于需要在作业启动任务的群集中分布的jar和文件。因此,该名称有点误导,因为它“缓存”任何东西。