Hadoop 中的分布式缓存概念

Distributed Cache Concept in Hadoop

我的问题是专门针对Hadoop的分布式缓存的概念,是不是应该叫分布式缓存。分布式缓存的常规定义是“分布式缓存跨越多个服务器,因此它的大小和事务容量可以增长”。

这在 hadoop 中是不正确的,因为分布式缓存分布到运行任务的所有节点,即驱动程序代码中提到的同一文件。

这不应该被称为复制缓存。如果我们按照传统的分布式缓存定义,所有节点上缓存的交集应该为空(或接近)。但是对于 hadoop,交集的结果是所有节点中都存在的同一个文件。

我的理解是正确的还是我遗漏了什么?请指导。

谢谢

任何Cache的一般理解和概念是让数据在内存中可用,避免在读取数据时撞到磁盘。因为从磁盘读取数据比从内存读取数据成本更高。

现在让我们对 Hadoop 生态系统做同样的类比。这里的磁盘是您的 HDFSmemory 是本地文件系统,其中是实际任务 运行。在一个应用的生命周期中,可能有多个任务在同一个节点上运行ning。所以当第一个任务在节点中启动时,它会从 HDFS 中获取数据并将其放入本地系统。现在同一节点上的后续任务不会再次获取相同的数据。这样,与从本地文件系统获取数据相比,它将节省从 HDFS 获取数据的成本。这是MapReduce框架中Distributed Cache的概念。

数据的大小通常足够小,可以加载到 Mapper 内存中,通常为几 MB。

我也同意这不是真的“Distributed cache”。但我相信 YoungHobbit 对不命中磁盘进行 IO 操作的效率的评论。

根据 Apache 文档,我在该机制中看到的唯一优点:

The framework will copy the necessary files on to the slave node before any tasks for the job are executed on that node. Its efficiency stems from the fact that the files are only copied once per job and the ability to cache archives which are un-archived on the slaves.

请注意,DistributedCache 自 2.6.0 版本以来已被弃用。您必须使用 Job class 中的新 API 才能实现相同的功能。