建议的基于 Hadoop 的设计/组件用于摄取定期 REST API 调用
Suggested Hadoop-based Design / Component for Ingestion of Periodic REST API Calls
我们计划使用 REST API 调用从端点提取数据并将数据存储到 HDFS。 REST 调用以周期性方式(每天或可能每小时)完成。
我已经使用 Flume 完成了 Twitter 摄取,但我认为使用 Flume 不适合我当前的用例,因为我没有使用像这样的连续数据流在 Twitter 中,而是离散的定期限时调用。
我现在的想法是使用自定义 Java 来处理 REST API 调用并保存到 HDFS,然后在那个 Java jar 上使用 Oozie 协调器.
我想听听关于设计以及用于此用例的基于 Hadoop 的组件的建议/备选方案(如果有比我现在想的更简单的话)。如果你觉得我可以坚持Flume,那么也请告诉我如何做到这一点。
如 Apache Flume 网站所述:
Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregating and moving large amounts of log data from many different sources to a centralized data store.
如您所见,Flume 的特征之一是数据收集。 "Pushing-like or emitting-like" 由于 HttpSource
, AvroSurce
, ThriftSource
, etc. In your case, where the data must be let's say "actively pulled" from a http-based service, the integration is not so obvious, but can be done. For instance, by using the ExecSource
,数据源很容易集成,它运行脚本获取数据并将其推送到 Flume 代理。
如果您使用专有代码负责拉取数据并将其写入 HDFS,这样的设计是可以的,但是您将缺少一些有趣的内置 Flume 特性(可能是您将不得不自己实施):
- 可靠性。 Flume 有机制确保数据真正持久化在最终存储中,重试直到有效写入。这是通过在输入(摄取负载峰值)和输出(保留数据直到它被有效持久化)和事务概念上使用内部通道缓冲数据来实现的。
- 性能。事务的使用和配置多个并行接收器(数据处理器)的可能性将使您的部署能够处理每秒生成的大量数据。
- 可用性。通过使用 Flume,您无需处理存储细节(例如 HDFS API)。即使有一天您决定更改最终存储,您只需重新配置 Flume 代理即可使用新的相关接收器。
我们计划使用 REST API 调用从端点提取数据并将数据存储到 HDFS。 REST 调用以周期性方式(每天或可能每小时)完成。
我已经使用 Flume 完成了 Twitter 摄取,但我认为使用 Flume 不适合我当前的用例,因为我没有使用像这样的连续数据流在 Twitter 中,而是离散的定期限时调用。
我现在的想法是使用自定义 Java 来处理 REST API 调用并保存到 HDFS,然后在那个 Java jar 上使用 Oozie 协调器.
我想听听关于设计以及用于此用例的基于 Hadoop 的组件的建议/备选方案(如果有比我现在想的更简单的话)。如果你觉得我可以坚持Flume,那么也请告诉我如何做到这一点。
如 Apache Flume 网站所述:
Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregating and moving large amounts of log data from many different sources to a centralized data store.
如您所见,Flume 的特征之一是数据收集。 "Pushing-like or emitting-like" 由于 HttpSource
, AvroSurce
, ThriftSource
, etc. In your case, where the data must be let's say "actively pulled" from a http-based service, the integration is not so obvious, but can be done. For instance, by using the ExecSource
,数据源很容易集成,它运行脚本获取数据并将其推送到 Flume 代理。
如果您使用专有代码负责拉取数据并将其写入 HDFS,这样的设计是可以的,但是您将缺少一些有趣的内置 Flume 特性(可能是您将不得不自己实施):
- 可靠性。 Flume 有机制确保数据真正持久化在最终存储中,重试直到有效写入。这是通过在输入(摄取负载峰值)和输出(保留数据直到它被有效持久化)和事务概念上使用内部通道缓冲数据来实现的。
- 性能。事务的使用和配置多个并行接收器(数据处理器)的可能性将使您的部署能够处理每秒生成的大量数据。
- 可用性。通过使用 Flume,您无需处理存储细节(例如 HDFS API)。即使有一天您决定更改最终存储,您只需重新配置 Flume 代理即可使用新的相关接收器。