我正在运行一些实验来基准测试(通过 map-reduce)读取和处理存储在 HDFS 上的具有不同参数的数据所需的时间。我使用 pig 脚本来启动 map-reduce 作业。由于我经常使用同一组文件,因此我的结果可能会因为文件/块缓存而受到影响。
我想了解在 map-reduce 环境中使用的各种缓存技术。
假设存储在 HDFS 上的文件foo
(包含一些要处理的数据)占用1
HDFS 块并存储在 machine 中STORE
。在 map-reduce 任务期间,机器COMPUTE
通过网络读取该块并对其进行处理。缓存可以发生在两个级别:
- 缓存在机器内存中
STORE
(内存中文件缓存) - 缓存在机器的内存/磁盘中
COMPUTE
。
我很确定#1
缓存会发生。我想确定是否会发生类似的#2
事情?从这里的帖子来看,似乎没有进行客户端级别的缓存,因为COMPUTE
在刷新缓存之前,同一台机器上不太可能再次需要缓存的块。
此外,hadoop 分布式缓存是否仅用于将任何特定于应用程序的文件(不是特定于任务的输入数据文件)分发到所有任务跟踪器节点?还是任务特定的输入文件数据(如foo
文件块)缓存在分布式缓存中?我假设local.cache.size
相关参数只控制分布式缓存。
请澄清。