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