Apache flink 如何调试Flink中的可序列化异常?
我遇到了几个可序列化的异常,我在弗林克的互联网和文档上做了一些搜索;有一些著名的解决方案,如transient、extends Serializable等。每次异常的来源都非常清楚,但在我的例子中,我无法找到未序列化的确切位置 问:我应该如何调试这种异常? A.scala:Apache flink 如何调试Flink中的可序列化异常?,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我遇到了几个可序列化的异常,我在弗林克的互联网和文档上做了一些搜索;有一些著名的解决方案,如transient、extends Serializable等。每次异常的来源都非常清楚,但在我的例子中,我无法找到未序列化的确切位置 问:我应该如何调试这种异常? A.scala: class executor ( val sink: SinkFunction[List[String]] { def exe(): Unit = { xxx.....addSink(sinks)
class executor ( val sink: SinkFunction[List[String]] {
def exe(): Unit = {
xxx.....addSink(sinks)
}
}
B.斯卡拉:
class Main extends App {
def createSink: SinkFunction[List[String]] = new StringSink()
object StringSink {
// static
val stringList: List[String] = List()
}
// create a testing sink
class StringSink extends SinkFunction[List[String]] {
override def invoke(strs: List[String]): Unit = {
// add strs into the variable "stringList" of the compagin object StringSink
}
}
new executor(createSink()).exe()
// then do somethings with the strings
}
例外情况是:
函数的实现不可序列化。这个
对象可能包含或引用不可序列化的字段
我发现了两个可疑点:
StringSink
的实例被传递到另一个文件中StringSink
类中,它使用静态变量stringList
它的compagin对象我的第一个猜测是,您在StringSink中没有无参数构造函数 POJO类型的规则 如果满足以下条件,Flink将数据类型识别为POJO类型(并允许“按名称”字段引用):
我也面临类似的问题。过去,找出哪些成员/对象不可序列化需要很长时间。异常日志并没有真正的帮助 帮助我的是以下JVM选项,它支持异常跟踪中的更多细节 启用此选项 -Dsun.io.serialization.extendedDebugInfo=true
class StringSink extends SinkFunction[List[String]] {
public StringSink() {
}
@override def invoke(strs: List[String]): Unit = {
// add strs into the variable "stringList" of the compagin object StringSink
}
}