Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分布式缓存Hadoop和可伸缩性_Java_Hadoop - Fatal编程技术网

Java 分布式缓存Hadoop和可伸缩性

Java 分布式缓存Hadoop和可伸缩性,java,hadoop,Java,Hadoop,我有一个要使用分布式缓存工具添加的文件列表。不同的reduce任务需要不同的文件。例如,文件A是reduce 1所需要的,而文件B是reduce 2所需要的,依此类推。 在作业配置中,使用DistributedCache.addCacheFile()方法添加这两个文件。 在reduce类配置方法中,我使用DistributedCache.getCacheFiles()获取文件。 我是否可能在reduce 1的内存中只有文件A,在reduce 2的内存中只有文件B。或者在reduce任务开始之前,

我有一个要使用分布式缓存工具添加的文件列表。不同的reduce任务需要不同的文件。例如,文件A是reduce 1所需要的,而文件B是reduce 2所需要的,依此类推。 在作业配置中,使用DistributedCache.addCacheFile()方法添加这两个文件。 在reduce类配置方法中,我使用DistributedCache.getCacheFiles()获取文件。 我是否可能在reduce 1的内存中只有文件A,在reduce 2的内存中只有文件B。或者在reduce任务开始之前,这两个文件都被添加到内存中

如果我理解这一点,我可以为我的程序使用分布式缓存。我关心的是可伸缩性。文件很大。因此,reduce任务不能同时在内存中存储这两个文件。但可以保存其中一个文件

请帮忙


感谢

返回缓存文件的方法,它将按添加顺序返回缓存文件的所有名称的数组。因此,可以让reducer 1获取数组[0]文件,让reduce 2获取数组[1]文件。还建议此缓存中不要有太大的文件。

分布式缓存不在内存中,它只是一个令人困惑的名称,将文件和jar一起复制到每个运行计算的主机上。感谢您指出这一点。因此,我们可以添加一个文件,该文件的大小与节点的磁盘空间所能容纳的大小一样?当reducer处理该文件时,是否有必要将整个文件保存在内存中?这取决于mapper/reducer中处理文件的方式。Hadoop框架提供了获取缓存中文件列表的功能,然后可以根据需要读取文件内容并将其保存在内存中。Hadoop framework将所有缓存文件复制到TastTracker上的HDD上,并且基于
local.cache.size
,有10GB的限制。谢谢回复!!因此,无论分布式缓存中添加了多少文件,reducer都可以选择它想要的文件。我说得对吗?由于它正在将其复制到reduce节点,因此它正在将其复制到磁盘,因此文件可以与节点的磁盘空间一样大,对吗?映射器/还原器可以使用DistributedCache获取缓存中的文件列表,并可以处理所需的文件。但是,关键是Hadoop框架会将所有文件复制到TaskTracker节点,而不管Mapper/Reducer是否使用该文件。谢谢!这确实消除了我的疑虑。我还有一个问题。由于它将文件复制到每个节点,因此复制的文件通过网络传输(我想是这样),因此,如果文件很大或节点很多,它不会影响网络性能吗?