Alex Parrill created HIVE-22393: ----------------------------------- Summary: HiveStreamingConnection: Exception in beginTransaction causes AbstractRecordWriter to throw NPE, covering up real exception Key: HIVE-22393 URL: https://issues.apache.org/jira/browse/HIVE-22393 Project: Hive Issue Type: Bug Components: Streaming Affects Versions: 3.1.2 Reporter: Alex Parrill
Getting an error in my code that does some basic stuff with {{HiveStreamingConnection}}: {code} 19/10/23 15:12:44 ERROR yarn_logger.Main: Thread worker-0 uncaught exception java.lang.RuntimeException: org.apache.hive.streaming.StreamingException: Unable to close at com.datto.yarn_logger.WorkerThread.run(WorkerThread.java:51) Caused by: org.apache.hive.streaming.StreamingException: Unable to close at org.apache.hive.streaming.HiveStreamingConnection$TransactionBatch.close(HiveStreamingConnection.java:973) at org.apache.hive.streaming.HiveStreamingConnection$TransactionBatch.markDead(HiveStreamingConnection.java:833) at org.apache.hive.streaming.HiveStreamingConnection$TransactionBatch.<init>(HiveStreamingConnection.java:677) at org.apache.hive.streaming.HiveStreamingConnection$TransactionBatch.<init>(HiveStreamingConnection.java:596) at org.apache.hive.streaming.HiveStreamingConnection.createNewTransactionBatch(HiveStreamingConnection.java:485) at org.apache.hive.streaming.HiveStreamingConnection.beginNextTransaction(HiveStreamingConnection.java:466) at org.apache.hive.streaming.HiveStreamingConnection.beginTransaction(HiveStreamingConnection.java:507) at com.datto.yarn_logger.WorkerThread.run(WorkerThread.java:49) Caused by: java.lang.NullPointerException at org.apache.hive.streaming.AbstractRecordWriter.logStats(AbstractRecordWriter.java:547) at org.apache.hive.streaming.AbstractRecordWriter.close(AbstractRecordWriter.java:352) at org.apache.hive.streaming.HiveStreamingConnection$TransactionBatch.closeImpl(HiveStreamingConnection.java:979) at org.apache.hive.streaming.HiveStreamingConnection$TransactionBatch.close(HiveStreamingConnection.java:970) ... 7 more {code} Digging through the stack trace... {{TransactionBatch}} will try to catch exception in its constructor, and calls the close method if an exception is thrown (which is definitely happening; that's line 677 in {{HiveStreamingConnection.java}}). This eventually calls {{AbstractRecordWriter::close}} which, calls {{logStats}}, which tries to use {{heapMemoryMonitor}}, which is null because presumably {{init}} had never been called on the writer yet. Easy fix would to just check in {{logStats}} if {{heapMemoryMonitor}} is null, and do the same thing if the method it calls returns null in it. -- This message was sent by Atlassian Jira (v8.3.4#803005)