gpt4 book ai didi

Hadoop Map-Reduce OutputFormat 用于将结果分配给内存变量(不是文件)?

转载 作者:可可西里 更新时间:2023-11-01 14:21:16 25 4
gpt4 key购买 nike

(来自 Hadoop 新手)

我想在玩具 Hadoop 概念验证示例中尽可能避免使用文件。我能够从非基于文件的输入中读取数据(感谢 http://codedemigod.com/blog/?p=120 )——这会生成随机数。

我想将结果存储在内存中,以便我可以对其进行进一步的(非 Map-Reduce)业务逻辑处理。本质上:

conf.setOutputFormat(InMemoryOutputFormat)
JobClient.runJob(conf);
Map result = conf.getJob().getResult(); // ?

似乎做我想做的最接近的事情是以二进制文件输出格式存储结果,然后用等效的输入格式将其读回。这似乎是不必要的代码和不必要的计算(我是不是误解了 Map Reduce 所依赖的前提?)。

最佳答案

这个想法的问题在于 Hadoop 没有“分布式内存”的概念。如果您希望结果“在内存中”,那么下一个问题必须是“哪台机器的内存?”如果你真的想那样访问它,你将不得不编写你自己的自定义输出格式,然后要么使用一些现有的框架来跨机器共享内存,要么再次编写你自己的。

我的建议是像往常一样简单地写入 HDFS,然后对于非 MapReduce 业务逻辑,只需从通过 FileSystem API 从 HDFS 读取数据开始,即:

FileSystem fs = new JobClient(conf).getFs();
Path outputPath = new Path("/foo/bar");
FSDataInputStream in = fs.open(outputPath);
// read data and store in memory
fs.delete(outputPath, true);

当然,它会进行一些不必要的磁盘读写操作,但是如果您的数据小到可以放入内存中,您为什么还要担心呢?如果这是一个严重的瓶颈,我会感到惊讶。

关于Hadoop Map-Reduce OutputFormat 用于将结果分配给内存变量(不是文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com