使用 HDFS 在 RAM 中缓存

Jac*_*far 5 caching hadoop hdfs

我需要用一个小集群(~10 个服务器)处理一些大文件(~2 TB),以便生成一个相对较小的报告(一些 GB)。

我只关心最终报告,不关心中间结果,而且机器有大量 RAM,因此最好使用它来减少尽可能多的磁盘访问(从而提高速度),最好是通过存储数据仅在使用磁盘时才在易失性内存中阻塞。

查看配置文件和上一个问题,似乎 Hadoop 不提供此功能。Spark 网站讨论了 memory_and_disk选项,但我更愿意要求公司部署基于新语言的新软件。

唯一的“解决方案”,我发现是设置 dfs.datanode.data.dir/dev/shm/在HDFS-default.xml中,欺骗它在这种情况下,它会表现得不好使用非易失性存储器,而不是文件系统来存储数据,但是,我认为,当RAM得到充分它使用交换。

有没有什么技巧可以让 Hadoop 尽可能多地将数据块存储在 RAM 上并仅在必要时才写入磁盘?

Mic*_*las 1

您可以尝试使用mapred.job.reduce.input.buffer.percent(默认为0,尝试更接近的值1.0,例如参见此博客文章mapred.inmem.merge.threshold)并设置to的值0。请注意,找到正确的值是一门艺术,需要进行一些实验。