【问题标题】:import external data into hdfs: is edge node a bottle neck?将外部数据导入hdfs:边缘节点是瓶颈吗?
【发布时间】:2019-09-13 01:54:46
【问题描述】:

我是大数据的新手。我正在尝试将 MongoDB 集合摄取到 hdfs 中,并且可以选择使用 mongoDB java API + HDFS java API 和 Spark MongoDB 连接器。

  1. 这两种方法有何不同?我检查了 Spark MongoDB 连接器源代码,它还使用 mongoDB java API 写入 mongoDB,但使用 sparkSession 从 mongoDB 读取。

  2. 由于在我们的例子中 MongoDB 和 HDFS 集群不同,边缘节点是否充当 MongoDB 和 HDFS 集群之间的暂存区?如果是这样,如果 mongoDB 集合太大,边缘节点会成为瓶颈吗?概括一下这个问题,当将外部数据源(RDBM、NoSQL 等)引入 HDFS 时,边缘节点是否总是暂存区?

  3. 第二季度的跟进。有没有办法将 HDFS 数据节点直接连接到 mongoDB 服务器,跳过边缘节点?比如从 mongoDB 分片分区到 HDFS 分区。

感谢您的回答!

【问题讨论】:

  • 嗨! HDFS 是 Hadoop 分布式文件系统。我认为它不会从任何来源读取数据,它只能提供一个具有高容错性的存储分布式系统。因此,您可以将其用作文件系统来存储数据。关于使用 Apache Spark 从 MongoDB 读取并写入 HDFS,也许这是最好的方法,因为 Spark 利用分布式处理而不是单核处理,但是您需要分析您的应用程序并查看您的需求。跨度>
  • “读取”是指将数据从外部数据源摄取到 HDFS。你知道这些问题的答案吗?

标签: mongodb apache-spark hadoop hdfs bigdata


【解决方案1】:

所以,高级别的回答

mongoDB java API + HDFS java API,vs Spark MongoDB 连接器

您需要了解的是,Spark 不仅仅在边缘节点上暂存数据。它并行运行。并行上传数据,假设 Mongo 集合允许这样做。

与您自己的直接 Java API(甚至是集合转储)相比,加上上传,是的,边缘节点或其他任何地方都是瓶颈(和单点故障)

一个可以说是更好的架构涉及使用 Debezium 将 Mongo 事件作为单独的记录流式传输到 Kafka 主题中,然后您可以在事件进入 Kafka 时对其进行实时处理,可选择清理它们,然后将它们发送到 Hadoop,图形数据库、搜索引擎等(这里不需要 Spark)

【讨论】:

  • 感谢您的回答,这绝对有很大帮助。我们确实可以选择使用 Kafka。但我仍然想进一步了解 Spark 如何在不通过边缘节点的情况下“并行”执行所有操作。如果您解释起来太麻烦,我会很感激您指出我可以详细学习的地方。
  • 对我来说,边缘节点通常是唯一暴露给外部网络的节点,因此无论是否使用 spark,mongoDB 都会(物理上)遍历边缘数据。如有错误请指正。
  • @hawkssss Spark 命令被提交给 YARN ResourceManager,多个 Spark 执行程序被分发到 NodeManager,而不是通常在每个 DataNode 上运行。不需要触及边缘节点(您通常可以绕过从那里提交 Spark 作业,如果使用 --deploy-mode=cluster,它们不会在那里运行)。我不知道 SparkMongo 阅读器的内部结构是如何执行的
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
相关资源
最近更新 更多