3

我们计划使用 REST API 调用从端点摄取数据并将数据存储到 HDFS。REST 调用以定期方式(每天或每小时)完成。

我已经使用 Flume 完成了 Twitter 摄取,但我认为使用 Flume 不适合我当前的用例,因为我没有在 Twitter 中使用像这样的连续数据 Firehose,而是离散的常规时间限制调用。

我现在的想法是使用自定义 Java 来处理 REST API 调用并保存到 HDFS,然后在该 Java jar 上使用 Oozie 协调器。

我想听听有关设计以及用于此用例的基于 Hadoop 的组件的建议/替代方案(如果有比我现在想的更容易的话)。如果你觉得我可以坚持使用 Flume,那么请给我一个如何做到这一点的想法。

4

1 回答 1

3

如 Apache Flume web 中所述:

Apache Flume 是一个分布式、可靠且可用的系统,用于有效地收集、聚合和移动来自许多不同来源的大量日志数据到集中式数据存储。

如您所见,Flume 的特性之一是数据的收集。HttpSource由于, AvroSurce,等, “类似推送或类似发射”的数据源很容易集成ThriftSource。在您的情况下,如果数据必须从基于 http 的服务中“主动提取”,那么集成并不那么明显,但可以做到。例如,通过使用ExecSource,它运行一个脚本来获取数据并将其推送到 Flume 代理。

如果您使用负责提取数据并将其写入 HDFS 的专有代码,这样的设计是可以的,但是您会缺少一些有趣的内置 Flume 特性(可能需要您自己实现):

  • 可靠性。Flume 具有确保数据真正持久化在最终存储中的机制,并在有效写入之前重试。这是通过在输入(摄取负载峰值)和输出(保留数据直到有效持久化)和事务概念处使用内部通道缓冲数据来实现的。
  • 表现。事务的使用和配置多个并行接收器(数据处理器)的可能性将使您的部署能够处理每秒生成的大量数据。
  • 可用性。通过使用 Flume,您无需处理存储细节(例如 HDFS API)。甚至,如果有一天您决定更改最终存储,您只需重新配置 Flume 代理以使用新的相关接收器。
于 2015-11-11T09:07:53.663 回答