我用cassandra火花连接器和直接kafka使用spark。
随着时间的推移,我逐渐增加批量游行。 即使没有任何东西可以处理来自kafka的传入。
我认为批量只有几毫秒,但经过很长一段时间,一批可能需要几秒钟才能达到批处理间隔并最终崩溃。
我首先想到的是内存泄漏,但我认为处理时间不那么线性,而是呈指数级。
我真的不知道这些阶段会变得越来越长或延迟 在阶段之间增加。
我使用spark 1.4.0
关于此的任何指示?
编辑: 仔细研究每批处理时间的演变,比较总作业处理时间。
似乎即使批处理时间增加,作业处理时间也不会增加。 例如:对于占用7s的批次,每个作业处理时间的总和为1.5s。 (如下图所示)
是因为计算时间驱动程序端增加了,而不是计算时间执行程序端? 这个驱动程序计算时间没有显示在作业处理中吗?
如果是这样的话怎么能纠正它?
答案 0 :(得分:1)
我终于找到了解决问题的方法。
我在函数中添加了这个代码,用于添加过滤器并转换为我的rdd。
TypeConverter.registerConverter(new SomethingToOptionConverter[EventCC])
TypeConverter.registerConverter(new OptionToSomethingConverter[EventCC])
因为它在每个批次中调用,所以TypeConverter
内的同一个对象有很多时间。
而且我真的不知道它是如何工作的Cassandra Spark转换器,但它看起来像是反射内部的白色物体。
并且进行慢速反射x时间批处理使批次的所有处理时间都增加。