我需要使用一个小型集群(~10台服务器)处理一些大文件(~2 TB),以生成相对较小的报告(一些GB)。
我只关心最终报告,而不是中间结果和机器的RAM量很大,所以这将是梦幻般的用它来降低尽可能磁盘访问(以及因此增加的速度),非常仅在使用磁盘时将数据块存储在易失性存储器中。
查看配置文件和previous question似乎Hadoop不提供此功能。 Spark网站talks about a memory_and_disk选项,但我更愿意让公司部署基于新语言的新软件。
唯一的“溶液”我发现是设置dfs.datanode.data.dir
为/dev/shm/
在HDFS-default.xml中,欺骗它在这种情况下使用易失性存储器而不是文件系统来存储数据,静止我认为,当RAM变满并使用交换时,它会表现得很糟糕。
是否有一种技巧可以让Hadoop尽可能地在RAM上存储数据块并仅在必要时写入磁盘?
答案 0 :(得分:1)
您可以使用mapred.job.reduce.input.buffer.percent
(默认为0
,尝试更接近1.0
的内容,例如查看此blog post)并设置{{{ 1}}到mapred.inmem.merge.threshold
。请注意,找到正确的值是一门艺术,需要进行一些实验。
答案 1 :(得分:1)
自Hadoop 2.3发布以来,您可以使用HDFS in memory caching。