Wordcount в большом файле с помощью Spark - PullRequest
0 голосов
/ 02 августа 2020

У меня вопрос, как я могу работать с большими файлами с помощью Spark. Допустим, у меня есть действительно большой файл (1 ТБ), в то время как у меня есть доступ только к 500 ГБ ОЗУ в моем кластере. Простое приложение wordcount будет выглядеть следующим образом:

sc.textfile(path_to_file).flatmap(split_line_to_words).map(lambda x: (x,1)).reduceByKey()

Если у меня нет доступа к достаточному объему памяти, произойдет ли сбой указанного выше приложения из-за OOM? Если да, то как я могу это исправить?

1 Ответ

1 голос
/ 03 августа 2020

Что ж, это не проблема.

N разделов, равных размеру блока файловой системы HDFS (подобной), будут созданы на рабочих узлах на каком-то этапе физически, что приведет к выполнению многих N небольших задач, легко помещается в 500 ГБ в течение всего срока службы приложения Spark.

Разделы и их эквивалент задач будут выполняться одновременно, в зависимости от количества выделенных вами исполнителей. Если у вас есть, скажем, M-исполнители с 1 ядром, то max M-задачи выполняются одновременно. Зависит также от расписания и режима выделения ресурсов.

Spark обрабатывает, как и любая ОС, ситуации размера и ресурсов, и, в зависимости от доступных ресурсов, можно сделать больше или меньше. Планировщик DAG играет роль во всем этом. Но здесь все будет просто.

...