2015-03-18 159 views
0

我有一个螺栓,它使用一种方法(如loadDataFromFile())从磁盘上的文件(比如说/blah/blah/movie_data.csv)加载数据,并将其存储在内存中。这个文件每天早上10点刷新(保证在10点前更新)。我希望我的螺栓在刷新后重新加载文件中的所有数据(上午10点以后不久)。在风暴螺栓中轮询和触发任务

我该如何实施?我应该轮询movie_data.csv并检查时间戳是否比上次文件加载时间更新,如果是,请触发loaddataFromFile()方法?或者这可以通过使用某种形式的tick元组来完成?

我不需要代码/伪代码。只是对可能相关的图书馆/班级的一些指示。我已经看过了tick元组,但它似乎没有帮助,因为我想在特定的时间刷新文件,而不是每T秒钟一次。

有没有一种方法让螺栓在预定时间(例如每天上午10点)接收tick元组?这样,我就不必使用轮询来检查文件是否被刷新。

+0

谁写这个文件,你对这个过程有一些影响吗?我会亲自生成文件的MD5或SHA1,将其放入数据存储区,并在流水线上检查它是否已启动该过程(如果已更改)。 – zenbeni 2015-03-19 15:37:48

回答

0

这取决于您是否使用Trident拓扑。如果是Trident拓扑,则可以实现storm.trident.spout.BatchSpoutExecutorBatchSpoutExecutor.BatchSpoutEmitter.我记得,在实现这些接口时检查Trident示例。

希望这会有所帮助。

+0

此外,你可以使用滴答Tuple和刷新每24 x 3600 s对应刷新每一天;) – JFPicard 2015-03-18 23:19:22

+0

我不使用三叉戟。 24x3600将不起作用,因为如果我在早上7点开始拓扑结构,那么它将在上午7点每天生成一个滴答元组,而不是上午10点。 – Nik 2015-03-19 00:01:32

+0

在处理之前你能等一小时吗?如果您在上午11点处理文件,是否太晚了?如果没有,也许每个小时都打勾一次?另外,当你启动一个拓扑时,可能在启动它到达所需的时间之前使用睡眠,然后等待一天的时间? – JFPicard 2015-03-19 00:17:58

相关问题