[ https://issues.apache.org/jira/browse/FLINK-20504?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17247931#comment-17247931 ]
Rui Li commented on FLINK-20504: -------------------------------- One possible cause for this NPE is that the Hive {{recordWriter}} can be closed both in [finish|https://github.com/apache/flink/blob/release-1.11.1/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/connectors/hive/write/HiveBulkWriterFactory.java#L77] and [dispose|https://github.com/apache/flink/blob/release-1.11.1/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/connectors/hive/write/HiveBulkWriterFactory.java#L61]. Suppose {{finish}} is called first but then something goes wrong and {{dispose}} is invoked to do cleanup. Then the {{recordWriter}} is closed twice and leads to NPE. We can add some safety check to make sure this won't happen, i.e. by setting {{recordWriter=null}} after it's closed. But again, I'm not sure whether the problem causes job failure or just some error log. > NPE when writing to hive and fail over happened > ----------------------------------------------- > > Key: FLINK-20504 > URL: https://issues.apache.org/jira/browse/FLINK-20504 > Project: Flink > Issue Type: Bug > Components: Connectors / Hive > Affects Versions: 1.11.1 > Reporter: zhuxiaoshang > Priority: Major > > When writing to hive and fail over happened,I got the following exception > {code:java} > java.lang.NullPointerException > at > org.apache.parquet.hadoop.InternalParquetRecordWriter.flushRowGroupToStore(InternalParquetRecordWriter.java:165) > at > org.apache.parquet.hadoop.InternalParquetRecordWriter.close(InternalParquetRecordWriter.java:114) > at > org.apache.parquet.hadoop.ParquetRecordWriter.close(ParquetRecordWriter.java:165) > at > org.apache.hadoop.hive.ql.io.parquet.write.ParquetRecordWriterWrapper.close(ParquetRecordWriterWrapper.java:103) > at > org.apache.hadoop.hive.ql.io.parquet.write.ParquetRecordWriterWrapper.close(ParquetRecordWriterWrapper.java:120) > at > org.apache.flink.connectors.hive.write.HiveBulkWriterFactory$1.dispose(HiveBulkWriterFactory.java:61) > at > org.apache.flink.formats.hadoop.bulk.HadoopPathBasedPartFileWriter.dispose(HadoopPathBasedPartFileWriter.java:79) > at > org.apache.flink.streaming.api.functions.sink.filesystem.Bucket.disposePartFile(Bucket.java:235) > at java.util.HashMap$Values.forEach(HashMap.java:981) > at > org.apache.flink.streaming.api.functions.sink.filesystem.Buckets.close(Buckets.java:318) > at > org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSinkHelper.close(StreamingFileSinkHelper.java:108) > at > org.apache.flink.table.filesystem.stream.StreamingFileWriter.dispose(StreamingFileWriter.java:177) > at > org.apache.flink.streaming.runtime.tasks.StreamTask.disposeAllOperators(StreamTask.java:703) > at > org.apache.flink.streaming.runtime.tasks.StreamTask.cleanUpInvoke(StreamTask.java:635) > at > org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:542) > at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:721) > at org.apache.flink.runtime.taskmanager.Task.run(Task.java:546) > at java.lang.Thread.run(Thread.java:748) > {code} > But it does not reproduce every time. -- This message was sent by Atlassian Jira (v8.3.4#803005)