gpt4 book ai didi

java - 读取大型 mongodb 数据

转载 作者:IT老高 更新时间:2023-10-28 12:32:01 28 4
gpt4 key购买 nike

我有一个 java 应用程序需要从 MongoDB 3.2 读取大量数据并将其传输到 Hadoop。

此批处理应用程序每 4 小时运行一次,每天 6 次。

数据规范:

  • 文档:一次 80000 个(每 4 小时一次)
  • 大小:3gb

目前我正在使用 MongoTemplateMorphia 来访问 MongoDB。但是,使用以下方法处理此数据时出现 OOM 异常:

List<MYClass> datalist = datasource.getCollection("mycollection").find().asList();

读取这些数据并填充到 Hadoop 的最佳方式是什么?

  • MongoTemplate::Stream() 并一一写入Hadoop?
  • batchSize(someLimit) 并将整个批处理写入 Hadoop?
  • Cursor.batch() 并一一写入hdfs?

最佳答案

您的问题在于 asList()打电话

这会强制驱动程序遍历整个光标(80,000 文档几 Gig),将所有内容保存在内存中。

batchSize(someLimit)Cursor.batch()无论批量大小是多少,在您遍历整个光标时都无济于事。

相反,您可以:

1) 迭代光标:List<MYClass> datalist = datasource.getCollection("mycollection").find()

2) 一次读取一个文档并将文档输入缓冲区(比如说一个列表)

3) 对于每 1000 个文档(例如)调用 Hadoop API,清除缓冲区,然后重新开始。

关于java - 读取大型 mongodb 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46465323/

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