使用HDFS在RAM中缓存

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

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

看看配置文件和previous question,似乎Hadoop不提供此功能. Spark网站talks about a memory_and_disk选项,但我更愿意让公司部署基于新语言的新软件.

我找到的唯一“解决方案”是将dfs.datanode.data.dir设置为hdfs-default.xml中的/ dev / shm /,以欺骗它使用易失性内存而不是文件系统来存储数据,在这种情况下它仍然是我认为,当RAM变满并使用交换时,表现会很糟糕.

是否有一个技巧可以让Hadoop尽可能地在RAM上存储数据块并仅在必要时写入磁盘?

最佳答案 您可以使用mapred.job.reduce.input.buffer.percent(默认为0,尝试更接近1.0的内容,例如参见此
blog post)以及将mapred.inmem.merge.threshold的值设置为0.找到正确的价值观是一种艺术,需要一些实验.

点赞