Почему Shuffle Spill (Memory) - это больше, чем память искрового драйвера / исполнителя - PullRequest
2 голосов
/ 25 июня 2019

После прочтения некоторых онлайн-форумов и вопросов о переполнении стека я понял следующее:

Разлив данных происходит, когда исполнителю не хватает памяти.И случайный разлив (память) - это размер десериализованной формы данных в памяти в тот момент, когда мы их разлили.

Я запускаю искру локально, и я установил память искрового драйвера на 10g.

Если мое понимание верно, то если для операции groupBy требуется больше, чем 10GB памяти выполнения, она должна пролить данные на диск.

Предположим, что операция groupByтребуется 12GB памяти, так как память драйвера установлена ​​на 10GB, она должна пролить почти 2GB данных на диск, поэтому Shuffle Spill (Disk) должен быть 2GB, а Shuffle spill (memory) должен быть развернут, что составляет 10GB, потому чтослучайный разлив (память) - это размер данных в памяти во время разлива.

Если мое понимание верно, то Shuffle spill (memory) <= Executor memory.В моем случае это память драйвера, так как я запускаю искру локально.

Но похоже, что я что-то упустил, ниже приведены значения из spark ui.

    Total Time Across All Tasks: 41 min
    Locality Level Summary: Process local: 45
    Input Size / Records: 1428.1 MB / 42783987
    Shuffle Write: 3.8 GB / 23391365
    Shuffle Spill (Memory): 26.7 GB
    Shuffle Spill (Disk): 2.1 GB

Даже если я установилпамяти искрового драйвера до 10g, как может быть разлив памяти больше, чем память, выделенная для драйвера.

Я наблюдал, как потребление памяти в диспетчере задач Windows никогда не превышало 10.5GB во время выполнения задания, тогда какВозможно, Shuffle Spill (Memory) составляет 26,7 ГБ.

DAG:

DAG Visualization

Хронология событий: 45 задач из-за 45 разделов для4,25 ГБ данных.

Event Timeline

Вот код, который я пытаюсь запустить , который является решением для моей предыдущей проблемы .

1 Ответ

0 голосов
/ 25 июня 2019

Я наблюдал, как потребление памяти в диспетчере задач Windows никогда не превышало 10,5 ГБ во время выполнения задания, а затем, как, возможно, Shuffle Spill (Memory) составляет 26,7 ГБ.

Это потому, что показатели агрегированы по всей задаче. Таким образом, если разлив произошел три раза, каждый раз с 10 ГБ в памяти, общий объем может быть даже 30 ГБ.

...