Fix error message when a non-nullable field receives a null value
Description
Currently, when this happens, you get an NPE:
ava.lang.Exception: java.lang.NullPointerException
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:489) ~[org.apache.hadoop.hadoop-mapreduce-client-common-2.8.0.jar:na]
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:549) ~[org.apache.hadoop.hadoop-mapreduce-client-common-2.8.0.jar:na]
Caused by: java.lang.NullPointerException: null
at co.cask.hydrator.common.RecordConverter.convertField(RecordConverter.java:105) ~[na:na]
at co.cask.format.avro.AvroToStructuredTransformer.transform(AvroToStructuredTransformer.java:57) ~[na:na]
at co.cask.format.parquet.input.PathTrackingParquetInputFormat$ParquetRecordReader.getCurrentValue(PathTrackingParquetInputFormat.java:101) ~[1548715186141-0/:na]
at co.cask.format.parquet.input.PathTrackingParquetInputFormat$ParquetRecordReader.getCurrentValue(PathTrackingParquetInputFormat.java:55) ~[1548715186141-0/:na]
at co.cask.hydrator.format.input.PathTrackingInputFormat$TrackingRecordReader.getCurrentValue(PathTrackingInputFormat.java:103) ~[na:na]
at co.cask.hydrator.format.input.PathTrackingInputFormat$TrackingRecordReader.getCurrentValue(PathTrackingInputFormat.java:79) ~[na:na]
at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReaderWrapper.getCurrentValue(CombineFileRecordReaderWrapper.java:98) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.getCurrentValue(CombineFileRecordReader.java:78) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at co.cask.cdap.internal.app.runtime.batch.dataset.input.DelegatingRecordReader.getCurrentValue(DelegatingRecordReader.java:60) ~[na:na]
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.getCurrentValue(MapTask.java:535) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at org.apache.hadoop.mapreduce.task.MapContextImpl.getCurrentValue(MapContextImpl.java:75) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.getCurrentValue(WrappedMapper.java:86) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.getCurrentValue(WrappedMapper.java:86) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at co.cask.cdap.internal.app.runtime.batch.MapperWrapper.run(MapperWrapper.java:135) ~[na:na]
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na]
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:270) ~[org.apache.hadoop.hadoop-mapreduce-client-common-2.8.0.jar:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_191]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_191]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_191]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_191]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_191]
Release Notes
Improved the error message when a null value is read for a non-nullable field in avro file sources
Currently, when this happens, you get an NPE:
ava.lang.Exception: java.lang.NullPointerException at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:489) ~[org.apache.hadoop.hadoop-mapreduce-client-common-2.8.0.jar:na] at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:549) ~[org.apache.hadoop.hadoop-mapreduce-client-common-2.8.0.jar:na] Caused by: java.lang.NullPointerException: null at co.cask.hydrator.common.RecordConverter.convertField(RecordConverter.java:105) ~[na:na] at co.cask.format.avro.AvroToStructuredTransformer.transform(AvroToStructuredTransformer.java:57) ~[na:na] at co.cask.format.parquet.input.PathTrackingParquetInputFormat$ParquetRecordReader.getCurrentValue(PathTrackingParquetInputFormat.java:101) ~[1548715186141-0/:na] at co.cask.format.parquet.input.PathTrackingParquetInputFormat$ParquetRecordReader.getCurrentValue(PathTrackingParquetInputFormat.java:55) ~[1548715186141-0/:na] at co.cask.hydrator.format.input.PathTrackingInputFormat$TrackingRecordReader.getCurrentValue(PathTrackingInputFormat.java:103) ~[na:na] at co.cask.hydrator.format.input.PathTrackingInputFormat$TrackingRecordReader.getCurrentValue(PathTrackingInputFormat.java:79) ~[na:na] at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReaderWrapper.getCurrentValue(CombineFileRecordReaderWrapper.java:98) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.getCurrentValue(CombineFileRecordReader.java:78) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at co.cask.cdap.internal.app.runtime.batch.dataset.input.DelegatingRecordReader.getCurrentValue(DelegatingRecordReader.java:60) ~[na:na] at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.getCurrentValue(MapTask.java:535) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at org.apache.hadoop.mapreduce.task.MapContextImpl.getCurrentValue(MapContextImpl.java:75) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.getCurrentValue(WrappedMapper.java:86) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.getCurrentValue(WrappedMapper.java:86) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at co.cask.cdap.internal.app.runtime.batch.MapperWrapper.run(MapperWrapper.java:135) ~[na:na] at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) ~[org.apache.hadoop.hadoop-mapreduce-client-core-2.8.0.jar:na] at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:270) ~[org.apache.hadoop.hadoop-mapreduce-client-common-2.8.0.jar:na] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_191] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_191] at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_191]