5

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

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

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

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

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

4

2 回答 2

2

自 Hadoop 2.3 发布以来,您可以在内存缓存中使用 HDFS

于 2014-09-01T14:41:49.177 回答
1

You can toy around with mapred.job.reduce.input.buffer.percent (defaults to 0, try something closer to 1.0, see for example this blog post) and also setting the value of mapred.inmem.merge.threshold to 0. Note that finding the right values is a bit of an art and requires some experimentation.

于 2013-04-14T07:27:54.820 回答