![](/img/trans.png)
[英]Apache Flink: NullPointerException caused by TupleSerializer
[英]Why I got a NullPointerException when using initializeState() in Apache Flink?
我在CheckpointedFuntion中使用運算符狀態,但是在初始化MapState時遇到NullPointerException:
public void initializeState(FunctionInitializationContext context) throws Exception {
MapStateDescriptor<Long, Long> descriptor
= new MapStateDescriptor<>(
"state",
TypeInformation.of(new TypeHint<Long>() {}),
TypeInformation.of(new TypeHint<Long>() {})
);
state = context.getKeyedStateStore().getMapState(descriptor);
}
當我將“描述符”分配給getMapState()時,我得到了NullPointerException
這是堆棧跟蹤:
java.lang.NullPointerException
at fyp.Buffer.initializeState(Iteration.java:51)
at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.tryRestoreFunction(StreamingFunctionUtils.java:178)
at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.restoreFunctionState(StreamingFunctionUtils.java:160)
at org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.initializeState(AbstractUdfStreamOperator.java:96)
at org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeState(AbstractStreamOperator.java:259)
at org.apache.flink.streaming.runtime.tasks.StreamTask.initializeOperators(StreamTask.java:694)
at org.apache.flink.streaming.runtime.tasks.StreamTask.initializeState(StreamTask.java:682)
at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:253)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:718)
at java.lang.Thread.run(Thread.java:748)
我猜你撞到一個NPE由於你試圖訪問的事實KeyedStateStore
記錄在這里 ; 但是,由於您沒有密鑰流,因此在您的工作中沒有這樣的狀態存儲。
獲取系統鍵/值狀態的句柄。 僅當在KeyedStream上執行函數時,鍵/值狀態才可訪問。 每次訪問時,狀態都會公開該函數當前正在處理的元素的鍵的值。 每個功能可能具有多個分區狀態,並以不同的名稱尋址。
因此,如果您在未設置密鑰的上游(而您不會)實現CheckpointedFunction
( 在此處記錄 ),則應考慮訪問操作員狀態存儲
snapshotMetadata = context.getOperatorStateStore.getUnionListState(descriptor)
操作員狀態使您可以在作業的每個並行實例中擁有一個狀態,與之相反,鍵控狀態則是每個狀態實例都取決於鍵控流產生的鍵控。
請注意,在上面的示例中,我們請求.getUnionListState
,該結果將生成您的操作員狀態的所有並行實例(格式為狀態列表)。
如果您尋找一個具體的示例,可以對此源進行一下介紹:它是實現操作員狀態的操作員。
最后,如果您需要一個鍵控流,那么您可能會考慮將解決方案移近鍵控狀態Flink backend 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.