将数据从 MongoDB 发送到 Hadoop 的有效方法是啥?

Posted

技术标签:

【中文标题】将数据从 MongoDB 发送到 Hadoop 的有效方法是啥?【英文标题】:What is an efficient way to send data from MongoDB to Hadoop?将数据从 MongoDB 发送到 Hadoop 的有效方法是什么? 【发布时间】:2014-01-07 09:19:54 【问题描述】:

我正在与一位同事讨论 Hadoop 的 MongoDB 连接器的使用,他解释说它非常低效。他表示 MongoDB 连接器使用自己的 map reduce,然后使用 Hadoop map reduce,这会在内部减慢整个系统的速度。

如果是这样,将我的数据传输到 Hadoop 集群的最有效方法是什么?如果 MongoDB 连接器效率更低,它的用途是什么?在我的场景中,我想从 MongoDB 中获取每日插入的数据(大约 10MB)并将其全部放入 Hadoop。我还要补充一点,每个 MongoDB 节点和 Hadoop 节点都共享同一个服务器。

【问题讨论】:

当您的 Hadoop 节点和您的 MongoDB 节点无论如何都运行在同一个硬件上时,为什么还要担心哪个执行 MapReduce? @Philipp 这对我来说都是比较新的,但我的同事告诉我的是 MongoDB 的 MapReduce 与 Hadoop 的版本不同。而且 MongoDB 的速度要慢很多。 根据***.com/questions/9287585/…,我猜他的简报有一定的有效性。但我只是质疑连接器本身是否效率低下。 你测试并测量时间了吗?如果你没有,那只是道听途说。 好吧,我的连接器工作正常。我不确定如何在没有它的情况下发送数据,因为这一切对我来说仍然是新的。这就是为什么我只想检查我所学的所有东西在理论上是否有意义。否则,我真的不知道我做错了什么,或者我所做的一切是否按预期工作。 【参考方案1】:

MongoDB Connector for Hadoop 直接从 MongoDB 读取数据。您可以配置多个input splits 以并行读取同一个集合中的数据。 Mapper 和 Reducer 作业由 Hadoop 的 Map/Reduce 引擎运行,而不是 MongoDB 的 Map/Reduce。

如果您的数据估计正确(每天只有 10MB?),那么摄取量很小,如果您没有计算任何输入拆分,工作可能会更快。

您应该警惕 Hadoop 和 MongoDB 在同一台服务器上竞争资源,因为内存或磁盘争用会影响数据传输的效率。

【讨论】:

我不明白为什么我的同事说数据必须通过 Map Reduce 两次,来自 MongoDB 和 Hadoop。他是完全关闭还是这也是某种常见的做法?我有点怀疑他不知道自己在做什么(就像过去发生的那样)。 显然对集成的工作方式存在误解。两次运行同一个 Map/Reduce 进程(一次在 MongoDB 上,再次在 Hadoop 上)是没有意义的。如果数据已经减少,那么第二个 M/R 无论如何都不会做任何事情:)。如果您使用 Hadoop 作为数据处理引擎,MongoDB 通过 Hadoop 连接器的角色是作为数据输入或输出源:“用于 Hadoop 的 MongoDB 连接器是一个库,它允许 MongoDB(或其数据格式的备份文件,BSON)用作 Hadoop MapReduce 任务的输入源或输出目标”。 如果您不介意,我还有更多问题。显然,每天处理的数据量平均约为 10-50 GB。在解释了为什么 Hadoop 对此不好之后,我的同事建议使用 Twitter 的 Storm。 Storm适合这个吗?我自然会认为这不是因为它被标记为实时 Hadoop,但我真的没有看到任何文章说它对于少量数据效率低下。 什么最适合 10 - 50 GB 左右的实时数据处理?【参考方案2】:

要将您的数据从 Mongodb 传输到 Hadoop,您可以使用一些 ETL 工具,例如 Talend 或 Pentaho,它更加简单实用!祝你好运 !

【讨论】:

以上是关于将数据从 MongoDB 发送到 Hadoop 的有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何将文档从我的 mongodb 数据库发送到 android 应用程序?

React Native 如何将 AsyncStorage 数据发送到 MongoDB 数据库?

如何将对象从 MongoDB 发送到玉?

将主题数据从 Java 生产者下沉到 Mongodb

将数据从服务器(Node.js)发送到 GraphQL 服务器中的客户端(React 组件)

如何向 hadoop 导入数据