当使用netcat处理火花流中的日志时,它会丢弃最后几行?

时间:2016-02-09 01:23:10

标签: apache-spark spark-streaming netcat

我有一个火花流服务,我根据一些离线生成的模型处理和检测异常。我通过日志文件将数据提供给此服务,该日志文件使用以下命令进行流式传输

tail -f <logfile>| nc -lk 9999

此处火花串流服务正在从端口9999获取数据。但是,我观察到最后几行被丢弃,即火花流没有接收到那些日志行或者它们没有被处理。

但是,我还观察到,如果我只是将日志文件作为标准输入而不是拖尾,则不会删除任何行:

nc -q 10 -lk 9999 < logfile

任何人都可以解释为什么会发生这种情况吗?什么可以更好地解决流式传输日志数据以引发流式实例的问题?

1 个答案:

答案 0 :(得分:0)

Spark Streaming中,数据通过网络传入,并在每个块间隔上构成。此块将在其他计算机上复制(根据您的storage level一旦形成。一旦批处理间隔过去,自上一批间隔时间形成的每个块都会形成新ntp的一部分{{ 1}}。一旦你形成了这个RDD,你就可以安排一份工作,那么在批处理间隔RDD期间收集的数据就会被处理< / em>在批处理间隔期间n

因此,“向最终丢失一些数据”的罪魁祸首可能是:

  • 在监视Spark的输入的同时,您正在观察输入文件。如果您考虑在即时n+1进行监控,经过t个批处理间隔后,您的日志文件已生成n个批次的数据,然后是一些(“多一点”) )。除此之外,下一批(n)的开始处于数据收集阶段的此阶段,以接收器上的块的形式出现。没有数据丢失,批处理n+1的处理尚未开始。

  • 或者您的应用程序假定它在每个n+1中收到了相似数量的元素,并且未正确处理可能(更多)较小的最后批次RDD

  • 或者您在最后一个批处理间隔过去之前停止了您的应用程序或数据(您需要等待RDD批处理间隔以查看n+1批处理数据的处理。

  • 或者执行者的系统时钟会发生奇怪的事情。您是否考虑过将它们与page同步?