将数据从 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 数据库?