建议的基于Hadoop的设计/组件,用于获取定期REST API调用

时间:2015-11-11 06:21:24

标签: rest hadoop data-ingestion

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

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

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

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

1 个答案:

答案 0 :(得分:3)

如Apache Flume网站所述:

  

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

正如您所看到的,归因于Flume的功能之一是收集数据。由于HttpSourceAvroSurceThriftSource等,“类似推送或类似发送”的数据源易于集成。在您的情况下,必须让数据“主动”从基于http的服务中拉出来,整合并不是那么明显,但可以做到。例如,使用ExecSource运行脚本获取数据并将其推送到Flume代理。

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

  • 可靠性。 Flume具有确保数据真正保留在最终存储中的机制,重试直到有效写入。这是通过在输入(摄取负载峰值)和输出(保留数据直到有效持久)和交易概念中使用内部通道缓冲数据来实现的。
  • 性能。事务的使用以及配置多个并行接收器(数据处理器)的可能性将使您的部署能够处理每秒产生的大量数据。
  • 可用性。通过使用Flume,您无需处理存储详细信息(例如HDFS API)。甚至,如果有一天你决定改变最终存储,你只需要重新配置Flume代理以使用新的相关接收器。