получение исключения нулевого указателя при потоковой передаче с искрой, когда требуется освободить память - PullRequest
0 голосов
/ 03 декабря 2018

Мы разработали потоковое структурирование с поддержкой искры, которое обрабатывает миллиарды записей в день.По некоторым причинам это иногда происходит случайным образом с исключением нулевого указателя:

ОШИБКА UnsafeShuffleWriter: В дополнение к ошибке во время записи, мы потерпели неудачу во время очистки.java.lang.NullPointerException в org.apache.spark.unsafe.memory.HeapMemoryAllocator.free (HeapMemoryAllocator.java:98) в org.apache.spark.memory.TaskMemoryManager.freePage (TaskMemoryMapache) org.ava).spark.memory.MemoryConsumer.freePage (MemoryConsumer.java:130) в org.apache.spark.shuffle.sort.ShuffleExternalSorter.freeMemory (ShuffleExternalSorter.java:300) в org.apache.sparkternal_shuffle.sort.SuffleExort.SuffleExortShuffleExternalSorter.java:312) в org.apache.spark.shuffle.sort.UnsafeShuffleWriter.write (UnsafeShuffleWriter.java:195) в org.apache.spark.scheduler.ShuffleMapTask.rscle.apask.asg: 96) (шас).spark.scheduler.ShuffleMapTask.runTask (ShuffleMapTask.scala: 53) в org.apache.spark.scheduler.Task.run (Task.scala: 109) в org.apache.spark.executor.Executor $ TaskRunner.run (Executor.scala: 345) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) на java.lang.Thread.run (Thread.java:745)

Когда я смотрю на искровой код , он не должен давать намNPE, так как это уже проверено в line 79.Мне кажется, проблема синхронизации заключается в том, что два потока, запрашивающие один и тот же блок памяти и пропускающие строку проверки на нулевое значение, и после этого один из них устанавливает для obj значение null, вызывая setObjAndOffset, а другой отказывает, но я не уверен,Любая работа вокруг, которая решает эту проблему, будет оценена.

...