(来自hadoop新手)
我想在一个玩具hadoop概念验证示例中尽可能避免使用文件。我能够从非基于文件的输入中读取数据(多亏了http://codedemigod.com/blog/?p=120)-生成随机数。
我想把结果存储在内存中,这样我就可以对它做一些进一步的(非map-reduce)业务逻辑处理。特别是:
conf.setOutputFormat(InMemoryOutputFormat)
JobClient.runJob(conf);
Map result = conf.getJob().getResult(); // ?
最接近我想要做的事情是将结果存储为二进制文件输出格式,并用等效的输入格式读回。这看起来像是不必要的代码和不必要的计算(我是不是误解了map reduce所依赖的前提?)。
1条答案
按热度按时间nfeuvbwi1#
这个想法的问题是hadoop没有“分布式内存”的概念。如果你想让结果“在内存中”,下一个问题是“哪台机器的内存?”如果你真的想这样访问它,你必须编写自己的自定义输出格式,然后还可以使用一些现有的框架来跨机器共享内存,或者再次编写自己的。
我的建议是,只需像平常一样写入hdfs,然后对于非mapreduce业务逻辑,只需通过文件系统api从hdfs读取数据即可,即:
当然,它会执行一些不必要的磁盘读写操作,但是如果您的数据足够小,可以放入内存,那么您为什么还要担心呢?如果这是一个严重的瓶颈,我会很惊讶。