Подтвердить что ты не робот

Почему раздел Spark RDD имеет ограничение 2 ГБ для HDFS?

У меня возникла ошибка при использовании mllib RandomForest для обучения данных. Поскольку мой набор данных огромен, а раздел по умолчанию относительно небольшой. поэтому генерируется исключение, указывающее, что "Размер превышает Integer.MAX_VALUE", трассировка стека orignal следующим образом:

15/04/16 14:13:03 WARN scheduler.TaskSetManager: потерянная задача 19.0 в этап 6.0 (TID 120, 10.215.149.47): java.lang.IllegalArgumentException: размер превышает Integer.MAX_VALUE
на sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:828) в org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala: 123) в org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala: 132) в org.apache.spark.storage.BlockManager.doGetLocal(BlockManager.scala: 517) в org.apache.spark.storage.BlockManager.getLocal(BlockManager.scala: 432) на org.apache.spark.storage.BlockManager.get(BlockManager.scala: 618) в org.apache.spark.CacheManager.putInBlockManager(CacheManager.scala: 146) на org.apache.spark.CacheManager.getOrCompute(CacheManager.scala: 70)

Integer.MAX_SIZE составляет 2 ГБ, кажется, что какой-то раздел из памяти. Поэтому я перепечатываю свой раздел rdd на 1000, так что каждый раздел может хранить гораздо меньше данных, чем раньше. Наконец, проблема решена!!!

Итак, мой вопрос: Почему размер раздела имеет ограничение 2G? Кажется, что в искре

4b9b3361

Ответ 1

Основная абстракция для блоков в искре - это ByteBuffer, которая, к сожалению, имеет предел Integer.MAX_VALUE (~ 2 ГБ).

Это критическая проблема, которая предотвращает использование искры с очень большими наборами данных. Увеличение количества разделов может разрешить его (например, в случае OP), но не всегда возможно, например, когда есть большая цепочка преобразований, часть которых может увеличить данные (flatMap и т.д.) Или в случаях, когда данные искажены.

Предлагаемое решение состоит в том, чтобы придумать абстракцию, например LargeByteBuffer, которая может поддерживать список байтовых буферов для блока. Это влияет на общую архитектуру искры, поэтому она довольно долгое время оставалась нерешенной.