Я написал программу для подсчёта количеств слов (классическая задача), и в конце написал запись в файл:
counts.saveAsTextFile(args[1]);
Если я JAR запускаю в режиме клиента (—deploy-mode client), то всё хорошо. Но если в режиме кластера, то постоянно возникают какие-то проблемы.
Сначала была проблема в том, что папка назначения уже существует (я указал папку в args[1], и она у всех экземпляров приложения одна и та же). Потом я установил параметр:
spark.hadoop.validateOutputSpecs false
Файл я сделал большой - 65 Мб. Теперь все executor'ы (а запускается их 4) падают с ошибкой 137. Судя по всему, что-то там падает по памяти. Думая, что он автоматом делит задачу на несколько мелких, указал —num-executors 50, но всё равно они падают.
Я предполагаю, что я что-то не так в целом делаю / понимаю. Мне же надо, по сути, чтобы он делил задачу на несколько executor-ов. Он это делает автоматически в RDD? Или надо как-то специально это прописывать?