【问题标题】:How does Hadoop get input data not stored on HDFS?Hadoop 如何获取未存储在 HDFS 上的输入数据?
【发布时间】:2017-09-15 15:10:09
【问题描述】:

我正在尝试将我的大脑包裹在 Hadoop 上并阅读 this excellent tutorial 并仔细阅读 official Hadoop docs。然而,在这些文献中,我都找不到一个简单的解释来解释一些非常基本的东西:

在所有人为设计的“Hello World!”(字数统计)介绍性 MR 示例中,输入数据直接存储在文本文件中。然而,对我来说,感觉在现实世界中很少会出现这种情况。我想象实际上,输入数据将存在于大型数据存储中,例如关系数据库、Mongo、Cassandra,或者只能通过 REST API 等获得。

所以我问:在现实世界中,Hadoop 是如何获取其输入数据的? 我确实看到有像 SqoopFlume 这样的项目,我想知道整个问题是否这些框架只是简单地将 ETL 输入数据输入到 HDFS 上以运行 MR 作业。

【问题讨论】:

  • 好问题,但在“现实世界”中也有很多情况(无论这对虚幻世界可能意味着什么),其中 hadoop 从 HDFS 上的文件中获取数据。您可能会发现 Hive 对您的需求很有用...
  • 谢谢@vefthym (+1) - 那么我想我的问题的根源是:数据首先是如何进入 HDFS 的? 至少必须有某种从各种异构系统(再次像 Mongo、Cassandra、REST API 等)到 HDFS 的前期 ETL。但我认为这些 ETL 过程会非常缓慢且耗费大量人力,以至于 Hadoop(或一些配套框架)能够直接从这些系统动态加载数据,要么完全绕过 HDFS,要么将它们加载到 HDFS JIT 上。
  • 也许您可能有兴趣探索FileInputFormat 以外的其他输入格式,例如DBInputFormat,允许您访问存储在数据库中的非 HDFS 数据。

标签: java hadoop hdfs nosql


【解决方案1】:

实际上,在现实世界的应用程序中需要 HDFS 的原因有很多。

  • 非常高的带宽支持 Map Reduce 工作负载和可扩展性。
  • 数据可靠性和容错性。由于复制和分布式性质。关键数据系统所必需的。
  • 灵活性 - 您无需预处理数据即可将其存储在 HDFS 中。

Hadoop 被设计为一次写入多次读取的概念。通常用于摄取的 Kafka、Flume 和 Sqoop 本身具有很强的容错性,并为 HDFS 的数据摄取提供高带宽。有时需要每分钟从数千个源中提取数据,数据以 GB 为单位。为此,需要这些工具以及容错存储系统-HDFS。

【讨论】:

  • 感谢@Anshul Joshi (+1) - 这是有道理的。那么您能否确认开发人员使用 Kafka/Flume/Sqoop/等“摄取工具”是典型/常见的。在 MR 作业实际运行之前将输入数据加载到 HDFS 中?如果您可以确认或澄清/纠正我,那么我应该已经准备好了。再次感谢!
  • 是的,它很常见,通常用于所有“生产”环境。对于所有关键的 MR 作业,数据仅且仅用于 HDFS。为了防止数据丢失或保持高吞吐量,我们必须使用此类摄取工具。希望我回答了你的问题。
猜你喜欢
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 2021-10-16
  • 2017-08-18
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
相关资源
最近更新 更多