Hadoop中的分布式缓存概念

时间:2015-12-08 04:12:56

标签: hadoop caching mapreduce distributed-computing

我的问题是关于专门针对Hadoop的分布式缓存的概念以及它是否应该被称为分布式缓存。传统的分布式缓存定义是“分布式缓存跨越多个服务器,以便它可以增加大小和事务容量”。

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

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

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

由于

2 个答案:

答案 0 :(得分:1)

任何Cache的一般理解和概念是使数据在内存中可用并避免命中磁盘以读取数据。因为从磁盘读取数据比从内存中读取更昂贵。

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

数据的大小通常很小,可以加载到Mapper内存中,通常只有几MB。

答案 1 :(得分:1)

我也同意它不是真的" Distributed cache"。但我确信YoungHobbit对IO操作没有达到磁盘效率的评论。

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

  

在该节点上执行作业的任何任务之前,框架会将必要的文件复制到从属节点。它的效率源于这样一个事实,即每个作业只复制一次文件,并且能够缓存未在存档上存档的存档。

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