带有updateStateByKey问题的Spark 24X7流式传输

时间:2014-10-26 06:25:34

标签: spark-streaming

我正在运行一个24/7的spark流,并使用updateStateByKey 有可能24/7运行火花流? 如果是,则updateStateByKey不会变大,如何处理它? 我们是否必须在24/7运行时定期重置/删除updateStateByKey,如果没有重置方式和时间? 或Spark以分布式方式处理?如何动态增加内存/存储空间。

当updateStateByKey增长

时,我收到以下错误
Array out of bound exception

Exception while deleting local spark dir: /var/folders/3j/9hjkw0890sx_qg9yvzlvg64cf5626b/T/spark-local-20141026101251-cfb4
java.io.IOException: Failed to delete: /var/folders/3j/9hjkw0890sx_qg9yvzlvg64cf5626b/T/spark-local-20141026101251-cfb4

如何处理这个..请指出我是否有任何文件?我完全陷入困境,非常感谢任何帮助..感谢您的时间

3 个答案:

答案 0 :(得分:5)

使用Java中的Optional.absent()和Scala中的None来删除键。可以在http://blog.cloudera.com/blog/2014/11/how-to-do-near-real-time-sessionization-with-spark-streaming-and-apache-hadoop/找到工作示例。

答案 1 :(得分:0)

使用None更新密钥会将其从spark中删除。如果您希望将密钥保留一段时间,可以将密钥过期时间附加到密钥中,并在每批次检查密钥。

例如,这里是按分钟计算记录的代码:

val counts = lines.map(line => (currentMinute, 1))
val countsWithState = counts updateStateByKey { (values: Seq[Int], state: Option[Int]) =>
  if (values.isEmpty) { // every key will be iterated, even if there's no record in this batch
    println("values is empty")
    None // this will remove the key from spark
  } else {
    println("values size " + values.size)
    Some(state.sum + values.sum)
  }
}

答案 2 :(得分:0)

pyspark:updateStateByKey(self,updateFunc,numPartitions = None,initialRDD = None)

返回一个新的“状态” DStream,其中每个键的状态通过应用 给定功能的键的先前状态和键的新值。

@param updateFunc:状态更新功能。如果此函数返回None,则                            相应的状态键值对将被消除。

updateFunc方法返回None,状态键值对删除;