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)