Flink學習5-常見問題
1 啓動報錯
ClassCastException: cannot assign instance
使用bin/flink run -m yarn-cluster ...
方式提交flink作業時,報錯如下:
Caused by: java.lang.ClassCastException: cannot assign instance of org.apache.commons.collections.map.LinkedMap to field org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.pendingOffsetsToCommit of type org.apache.commons.collections.map.LinkedMap in instance of org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer010
經查,是因爲
。我們提交的Flink作業,相關的class被動態加載。
可參考X cannot be cast to X exceptions
是因爲多個不同版本的org.apache.commons.collections.map.LinkedMap
被不同的CalssLoader加載,而這些類被嘗試轉換爲對方。
解決方法是編輯conf/flink-conf.yaml
,設置classloader.resolve-order: parent-first
(flink默認逆置了ClassLoader,使用ChildClassLoader即user code ClassLoader來動態加載類。這個選項就關閉了逆置,即優先使用ParentClassLoader Java Application ClassLoader動態加載)來關閉逆置或設置classloader.parent-first-patterns-additional
來單獨設置使用parent-first
的package。