我需要用一个小集群(大约10台服务器)处理一些大文件(大约2 TB),以便生成一个相对较小的报告(一些GB)。
我只关心最终报告,而不关心中间结果,而且机器有大量的ram,因此最好使用它来尽可能减少磁盘访问(从而提高速度),理想情况下只在需要时使用磁盘将数据块存储在易失性内存中。
看看配置文件和前面的一个问题,hadoop似乎没有提供这个功能。spark网站谈到了内存和磁盘选项,但我更愿意要求公司部署一个基于新语言的新软件。
我找到的唯一“解决办法”是 dfs.datanode.data.dir
作为 /dev/shm/
在hdfs-default.xml中,为了欺骗它使用易失性内存而不是文件系统来存储数据,我假设,在这种情况下,当ram满了并且使用交换时,它的行为仍然很糟糕。
有没有一个技巧可以让hadoop尽可能多地在ram上存储数据块,并且只在必要时才在磁盘上写?
2条答案
按热度按时间kdfy810k1#
你可以随便玩玩
mapred.job.reduce.input.buffer.percent
(默认为0
,尝试更接近1.0
,请参阅此博客文章的示例)并设置mapred.inmem.merge.threshold
至0
. 请注意,找到正确的值是一门艺术,需要一些实验。bakd9h0s2#
自从hadoop2.3发布以来,您可以在内存缓存中使用hdfs。