我们计划使用restapi调用从端点接收数据并将数据存储到hdfs。其余的通话是以周期性的方式进行的(每天或者每小时)。
我已经使用flume完成了twitter的接收,但是我认为使用flume不适合我当前的用例,因为我在twitter中没有使用像这样的连续数据消防软管,而是使用离散的有时间限制的常规调用。
我现在的想法是,使用定制java来处理restapi调用并保存到hdfs,然后在javajar上使用oozie协调器。
我想听听关于设计的建议/备选方案(如果有比我现在想的更简单的),以及在这个用例中使用哪个基于hadoop的组件。如果你觉得我可以坚持Flume,那么请给我一个想法,如何做到这一点。
1条答案
按热度按时间bbuxkriu1#
如apache flume网站所述:
apacheflume是一个分布式的、可靠的、可用的系统,用于有效地收集、聚合大量的日志数据,并将这些数据从许多不同的源移动到一个集中的数据存储区。
如您所见,flume的功能之一是收集数据。”“像推一样”或“像发射一样”的数据源很容易集成,这得益于
HttpSource
,AvroSurce
,ThriftSource
在您的例子中,数据必须从基于http的服务中“主动提取”,集成不是很明显,但是可以完成。例如,通过使用ExecSource
,它运行一个脚本获取数据并将其推送到flume代理。如果您使用一个专有代码来负责将数据拉入并写入hdfs,这样的设计是可以的,但是您将丢失一些有趣的内置flume特性(可能您必须自己实现):
可靠性。flume有一些机制来确保数据真正持久化到最终存储中,并在有效写入之前重试。这是通过使用一个内部通道来实现的,该通道在输入端(接收负载峰值)和输出端(保留数据直到有效地持久化)缓冲数据,并使用事务概念。
性能。事务的使用和配置多个并行接收器(数据处理器)的可能性将使您的部署能够处理每秒生成的大量数据。
可用性。通过使用flume,您不需要处理存储细节(例如hdfsapi)。甚至,如果有一天您决定更改最终存储,您只需重新配置flume代理以使用新的相关接收器。