我需要用一个小集群(~10 个服务器)处理一些大文件(~2 TB),以便生成一个相对较小的报告(一些 GB)。
我只关心最终报告,而不是中间结果,而且机器有大量 RAM,所以用它来尽可能减少磁盘访问(并因此提高速度)会很棒,最好是通过存储数据块在易失性内存中仅在使用磁盘时。
查看配置文件和之前的问题,Hadoop 似乎不提供此功能。Spark 网站讨论了 memory_and_disk选项,但我更愿意要求该公司部署基于新语言的新软件。
我发现的唯一“解决方案”是在 hdfs-default.xml 中设置 dfs.datanode.data.dir
,/dev/shm/
以欺骗它使用易失性内存而不是文件系统来存储数据,但在这种情况下,我认为当 RAM 变满时它的行为仍然很糟糕它使用交换。
有没有一个技巧可以让 Hadoop 尽可能多地将数据块存储在 RAM 上并仅在必要时才在磁盘上写入?