You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Alex Parrill (Jira)" <ji...@apache.org> on 2019/10/23 15:30:00 UTC

[jira] [Created] (HIVE-22393) HiveStreamingConnection: Exception in beginTransaction causes AbstractRecordWriter to throw NPE, covering up real exception

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)