Caching 使用HDFS在RAM中缓存

Caching 使用HDFS在RAM中缓存,caching,hadoop,hdfs,Caching,Hadoop,Hdfs,我需要用一个小集群(约10台服务器)处理一些大文件(约2 TB),以便生成一个相对较小的报告(一些GB) 我只关心最终报告,而不关心中间结果,而且机器有大量的RAM,因此最好使用它来尽可能减少磁盘访问(并因此提高速度),理想情况下只在需要时使用磁盘将数据块存储在易失性内存中 查看配置文件和一个示例,Hadoop似乎不提供此功能。Spark网站选项,但我更愿意要求该公司部署基于新语言的新软件 我找到的唯一“解决方案”是在hdfs-default.xml中将dfs.datanode.data.dir

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

我只关心最终报告,而不关心中间结果,而且机器有大量的RAM,因此最好使用它来尽可能减少磁盘访问(并因此提高速度),理想情况下只在需要时使用磁盘将数据块存储在易失性内存中

查看配置文件和一个示例,Hadoop似乎不提供此功能。Spark网站选项,但我更愿意要求该公司部署基于新语言的新软件

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


有没有办法让Hadoop尽可能多地将数据块存储在RAM上,并仅在必要时在磁盘上写入数据?

您可以玩弄
mapred.job.reduce.input.buffer.percent
(默认值为
0
,尝试更接近
1.0
,例如,请参见此示例)并将
mapred.inmem.merge.threshold的值设置为
0
。请注意,找到正确的值是一门艺术,需要一些实验。

自从Hadoop 2.3发布以来,您就可以使用它了。

谢谢!这篇文章听起来很有用,Hadoop优化可能很棘手