spark: java.io.IOException: на устройстве не осталось места [снова!]

Я получаю java.io.IOException: No space left on device, который возникает после выполнения простого запроса в sparklyr. Я использую обе последние версии Spark (2.1.1) и Sparklyr

df_new <-spark_read_parquet(sc, "/mypath/parquet_*", name = "df_new", memory = FALSE)

myquery <- df_new %>% group_by(text) %>% summarize(mycount = n()) %>% 
  arrange(desc(mycount)) %>% head(10)

#this FAILS
get_result <- collect(myquery)

я поставил оба

  • spark.local.dir <- "/mypath/"
  • spark.worker.dir <- "/mypath/"

используя обычный

config <- spark_config()

config$`spark.executor.memory` <- "100GB"
config$`spark.executor.cores` <- "3"
config$`spark.local.dir` <- "/mypath/"
config$`spark.worker.dir` <- "mypath/"
config$`spark.cores.max`<- "2000"
config$`spark.default.parallelism`<- "4"
config$`spark.total-executor-cores`<- "80"
config$`sparklyr.shell.driver-memory` <- "100G"
config$`sparklyr.shell.executor-memory` <- "100G"
config$`spark.yarn.executor.memoryOverhead` <- "100G"
config$`sparklyr.shell.num-executors` <- "90"
config$`spark.memory.fraction` <- "0.2"

  Sys.setenv(SPARK_HOME="mysparkpath")
  sc <- spark_connect(master = "spark://mynode", config = config)

где mypath имеет более 5 ТБ дискового пространства (я вижу эти параметры на вкладке Environment). Я попробовал аналогичную команду в Pyspark, но она не удалась (та же ошибка).

Глядя на вкладку Stages в Spark, я вижу, что ошибка возникает, когда shuffle write составляет около 60 GB. (ввод около 200GB). Это озадачивает, учитывая, что у меня много свободного места. Я уже рассмотрел другие решения SO...

Задание кластера запускается с помощью magpie https://github.com/LLNL/magpie/blob/master/submission-scripts/script-sbatch-srun/magpie.sbatch-srun-spark

Каждый раз, когда я запускаю задание Spark, я вижу каталог с именем spark-abcd-random_numbers в моей папке /mypath. но размер файлов там очень маленький (отсутствуют 60гб в случайном порядке пишут)

  • имеется около 40 паркетных массивов. каждый 700K (исходные csv файлов были 100 ГБ). По существу они содержат строки.
  • кластер состоит из 10 узлов, каждый из которых имеет 120 ГБ ОЗУ и 20 ядер.

В чем проблема? Спасибо!!


person ℕʘʘḆḽḘ    schedule 03.07.2017    source источник
comment
можете ли вы предоставить команду spark, которую вы используете, чтобы показать, что такое основной режим и режим развертывания. это может сильно помочь в вашем случае   -  person user1314742    schedule 10.07.2017
comment
@ user1314742 На самом деле я использую slurm. Я могу увидеть свой главный узел, набрав squeue -u myname. ты это имеешь ввиду?   -  person ℕʘʘḆḽḘ    schedule 10.07.2017
comment
Я искал команду spark-submit, которую вы ввели, но я вижу, что вы используете какой-то другой метод для запуска вашего приложения. поэтому возникает вопрос: как вам удалось установить свойства spark.local.dir и spark.worker.dir? у вас есть доступ к файлам конфигурации искры кластера?   -  person user1314742    schedule 10.07.2017
comment
Я установил их в качестве аргументов в sparklyr (см. обновленный вопрос). На вкладке Spark UI Environment я вижу эти параметры. Я так понимаю их учитывают?   -  person ℕʘʘḆḽḘ    schedule 10.07.2017
comment
@ user1314742 это помогает?   -  person ℕʘʘḆḽḘ    schedule 10.07.2017
comment
Вы можете проверить с помощью watch df -u, пока ваша работа выполняется, какой диск заполняется? это корневой объем? Затем я бы проверил, какие файлы его заполняют.   -  person Igor Berman    schedule 12.07.2017
comment
@ИгорьБерман, спасибо! df-u печатает миллиарды дисков. Мне нужно спамить команду или использование диска обновляется само по себе на экране?   -  person ℕʘʘḆḽḘ    schedule 12.07.2017
comment
@Noobie, дело в том, чтобы выяснить, какой диск заполняется и почему. команда watch обычно выполняет подкоманду время от времени (каждые 2 секунды по умолчанию, вы можете управлять ею...)   -  person Igor Berman    schedule 12.07.2017
comment
@IgorBerman аргумент -u у меня не работает. Это что правильная команда?. вы имеете в виду запуск df и du?   -  person ℕʘʘḆḽḘ    schedule 12.07.2017
comment
@IgorBerman, рассылая спам df -H Сначала я увидел /tmp/ заполнение до 80%, а затем никаких действий на этом диске или на других видимых дисках не было, нажав df -H Тем временем запись в случайном порядке увеличивалась с 10 ГБ до почти 80 ГБ, затем задание рухнуло из-за отсутствия свободного места на диске. . После сбоя ни один диск не заполнен на 100%. как это может быть?   -  person ℕʘʘḆḽḘ    schedule 12.07.2017
comment
@IgorBerman есть идеи? спасибо!!   -  person ℕʘʘḆḽḘ    schedule 12.07.2017
comment
@Noobie, единственная идея, которая у меня есть - может быть, вы используете оболочку sparkR или что-то в этом роде (? Я ее не использовал) и помещаете свое приложение в эту оболочку, так что действительно работает конфигурация оболочки, а не конфигурация искры, которая вы предоставляете ... вы уже получили совет по перезапуску машины, но если у вас есть процесс spark-slave (что-то CoarseGrained, попробуйте найти с помощью ps -ef) - вы можете сначала перезапустить его. Мы говорили о директории — вы используете локальный контекст искры? это единственная машина, которую вы используете?   -  person Igor Berman    schedule 13.07.2017
comment
@IgorBerman Я запускаю задание Spark, используя сценарий сороки. Пожалуйста, смотрите обновленный вопрос. Я задал параметры там в основном. Вы видите что-то, что может помочь?   -  person ℕʘʘḆḽḘ    schedule 13.07.2017
comment
@Noobie, вы пытались поиграть со следующей настройкой в ​​скрипте: export MAGPIE_LOCAL_DIR=/tmp/${USER}/magpie ? также экспортируйте SPARK_LOCAL_DIR=/tmp/${USER}/spark   -  person Igor Berman    schedule 13.07.2017
comment
@Noobie Вы пытались изменить скрипт сороки, чтобы предоставить параметры Java для задания искры?   -  person user1314742    schedule 17.07.2017


Ответы (5)


У меня была эта проблема несколько раз раньше. Причиной являются временные файлы. на большинстве серверов есть раздел очень маленького размера для /tmp/, который является временным каталогом по умолчанию для spark.
Обычно я менял это, устанавливая в команде spark-submit следующее:

$spark-submit --master local[*] --conf "spark.driver.extraJavaOptions=-Djava.io.tmpdir=/mypath/" ....

В вашем случае, я думаю, вы можете предоставить это для конфигурации в R следующим образом (я не проверял это, но это должно работать):

config$`spark.driver.extraJavaOptions` <- "-Djava.io.tmpdir=/mypath/"
config$`spark.executor.extraJavaOptions ` <- "-Djava.io.tmpdir=/mypath/"

Обратите внимание, что вам нужно изменить это для драйвера и исполнителей, поскольку вы используете автономный мастер Spark (как я вижу в вашем вопросе)

Я надеюсь, что это поможет

person user1314742    schedule 10.07.2017
comment
все еще получаю сообщение об ошибке.... параметр отображается на вкладке "Среда" как spark.executor.extraJavaOptions -Djava.io.tmpdir=/mypath. это правильно? - person ℕʘʘḆḽḘ; 10.07.2017
comment
и в чем разница между config$spark.worker.dir` ‹-mypath/`, который я использовал? спасибо! - person ℕʘʘḆḽḘ; 10.07.2017
comment
варианты правильные, они и для драйвера и для исполнителей так что у вас тоже должно быть spark.driver.extraJavaOptions -Djava.io.tmpdir=/mypath . Разница в том, что рабочий каталог - это параметры искры, где настройка java.io.tmpdir управляет процессом искры Java и переопределяет все свойства в искре. - person user1314742; 11.07.2017
comment
блин, ты видишь здесь другой способ добиться прогресса? я ошибаюсь с другими вариантами кластера? данные огромны и не могут поместиться в оперативной памяти - person ℕʘʘḆḽḘ; 11.07.2017
comment
также не имеет значения, как прописан путь? скажи \\mypath\myfolder или \\mypath\myfolder\ - person ℕʘʘḆḽḘ; 11.07.2017
comment
Я просматривал документы sparklyr, нет причин, по которым конфигурация не учитывалась. Я постараюсь узнать, как решить эту проблему - person user1314742; 12.07.2017
comment
спасибо, я обновлю вопросы с более подробной информацией о данных - person ℕʘʘḆḽḘ; 12.07.2017
comment
Спасибо чувак! моя проблема не решена, но я уверен, что решения на этой странице помогут другим людям! - person ℕʘʘḆḽḘ; 16.07.2017
comment
Я только что видел ваше обновление, так как вы используете скрипт magpie, есть возможность добавить эти настройки в скрипт: github.com/LLNL/magpie/blob/master/submission-scripts/ . здесь вы можете добавить export SPARK_JOB_JAVA_OPTS="-Djava.io.tmpdir=/mypath/" . не забудьте раскомментировать эту строку, удалив заголовок # - person user1314742; 16.07.2017

измените следующие настройки в вашем скрипте сороки

export MAGPIE_LOCAL_DIR="/tmp/${USER}/magpie" 
export SPARK_LOCAL_DIR="/tmp/${USER}/spark"

иметь префикс mypath, а не /tmp

person Igor Berman    schedule 13.07.2017
comment
мне нужно сохранить user/magpie вещи? - person ℕʘʘḆḽḘ; 14.07.2017
comment
это ваше решение, но я бы сказал как есть, так что будет четкая дифференциация - person Igor Berman; 15.07.2017

После установки параметра вы увидите новое значение spark.local.dir в пользовательском интерфейсе среды Spark. Но не отражает.

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

person Santhosh Tangudu    schedule 08.07.2017
comment
что вы имеете в виду, вы перезапустили машины? Я не могу перезапускать машины каждый раз, когда запускаю задание - person ℕʘʘḆḽḘ; 08.07.2017
comment
установите эти параметры в файле spark-defaults.conf и перезапустите серверы. Тогда не нужно передавать эти параметры извне. - person Santhosh Tangudu; 08.07.2017
comment
Если это так, попробуйте установить в шлюзе машину и проверьте один раз. - person Santhosh Tangudu; 08.07.2017

Поскольку вам нужно установить это, когда JVM запускается через spark-submit, вам нужно использовать sparklyr java-параметры, например.

config$`sparklyr.shell.driver-java-options` <- "-Djava.io.tmpdir=/mypath"

person kevinykuo    schedule 20.09.2017

У меня была эта самая проблема на этой неделе в кластере в автономном режиме, и после того, как я попробовал разные вещи, такие как некоторые рекомендации в этой теме, в конечном итоге это оказалась подпапка под названием «работа» внутри домашней папки Spark, которая некоторое время не проверялась, таким образом заполняя до рабочего

person edgararuiz    schedule 23.09.2017