在Spark Streaming中执行的作业没有数据

时间:2015-05-07 09:06:02

标签: streaming apache-spark

我的代码:

// messages is JavaPairDStream<K, V> 
Fun01(messages)
Fun02(messages)
Fun03(messages)

Fun01,Fun02,Fun03都有转换,输出操作(foreachRDD)。

  1. Fun01,Fun03都按预期执行,证明“messages”不为null或为空。

  2. 在Spark应用程序UI中,我在“Spark阶段”中找到Fun02的输出阶段,证明“已执行”。

  3. Fun02的第一行是地图功能,我在其中添加了登录。我还为Fun02中的每一步添加了日志,它们都证明“没有数据”。

  4. 有人知道可能的原因吗?非常感谢。

    @maasg Fun02的逻辑是:

    msg_02 = messages.mapToPair(...)
    msg_03 = msg_02.reduceByKeyAndWindow(...)
    msg_04 = msg_03.mapValues(...)
    msg_05 = msg_04.reduceByKeyAndWindow(...)
    msg_06 = msg_05.filter(...)
    
    msg_07 = msg_06.filter(...)
    msg_07.cache()
    msg_07.foreachRDD(...)
    

    我已经对我的公司的Spark集群支持的Spark-1.1和Spark-1.2进行了测试。

1 个答案:

答案 0 :(得分:0)

似乎这是Spark-1.1和Spark-1.2中的一个错误,已在Spark-1.3中修复。

我在此发布测试结果:http://secfree.github.io/blog/2015/05/08/spark-streaming-reducebykeyandwindow-data-lost.html

当连续使用两个reduceByKeyAndWindow时,根据窗口,幻灯片值,可能会出现“数据丢失”。

我找不到Spark的问题列表中的错误,所以我无法获得补丁。