Метод wholeTextFiles завершается с ошибкой с ExitCode 52 java.lang.OutOfMemoryError - PullRequest
2 голосов
/ 18 июня 2019

У меня есть каталог HDFS с 13,2 ГБ и 4 файлами в нем. Я пытаюсь прочитать все файлы, используя wholeTextFile метод в спарк, но у меня есть некоторые проблемы

Это мой код.

val path = "/tmp/cnt/warehouse/"
val whole = sc.wholeTextFiles("path",32)
val data = whole.map(r => (r._1,r._2.split("\r\n")))
val x = file.flatMap(r => r._1)
x.take(1000).foreach(println)

Ниже искра Подать.

spark2-submit \
--class SparkTest \
--master yarn \
--deploy-mode cluster \
--num-executors 32 \
--executor-memory 15G \
--driver-memory 25G \
--conf spark.yarn.maxAppAttempts=1 \
--conf spark.port.maxRetries=100 \
--conf spark.kryoserializer.buffer.max=1g \
--conf spark.yarn.queue=xyz \
SparkTest-1.0-SNAPSHOT.jar
  1. , хотя я даю минимальные разделы 32, он сохраняется только в 4 разделах.
  2. Моя искра отправлена ​​правильно или нет?

Ошибка ниже

Job aborted due to stage failure: Task 0 in stage 32.0 failed 4 times, most recent failure: Lost task 0.3 in stage 32.0 (TID 113, , executor 37): ExecutorLostFailure (executor 37 exited caused by one of the running tasks) Reason: Container from a bad node: container_e599_1560551438641_35180_01_000057 on host: . Exit status: 52. Diagnostics: Exception from container-launch.
Container id: container_e599_1560551438641_35180_01_000057
Exit code: 52
Stack trace: ExitCodeException exitCode=52: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:604)
    at org.apache.hadoop.util.Shell.run(Shell.java:507)
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:789)
    at org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor.__launchContainer__(LinuxContainerExecutor.java:399)
    at org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor.launchContainer(LinuxContainerExecutor.java)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)



Container exited with a non-zero exit code 52
.
Driver stacktrace:

1 Ответ

0 голосов
/ 19 июня 2019
  1. Несмотря на то, что я даю минимальные 32 раздела, он хранится в 4 разделах. только.

Вы можете обратиться по ссылке ниже

Spark создает меньше разделов, чем аргумент minPartitions для WholeTextFiles

  1. Моя искра отправлена ​​правильно или нет?

Синтаксис правильный, но переданное вами значение превышает необходимое. Я имею в виду вы предоставляете 32 * 15 = 480 ГБ для исполнителей + 25 ГБ для драйвера только для обработки 13 ГБ данных? Предоставление большего количества исполнителей и большего количества памяти не дает эффективного результата. Иногда это приводит к накладным расходам, а также к отказу из-за нехватки ресурсов
Ошибка также показывает проблему с ресурсами, которые вы используете. Для обработки только 13 ГБ данных вы должны использовать, как показано ниже конфигурации (не совсем, вы должны рассчитать):

Исполнители № 6 Ядро № 5 Исполнитель-Память 5 ГБ Память драйвера 2 ГБ

Для более подробной информации и расчета вы можете обратиться по ссылке ниже:

Как настроить номер искрового исполнителя, ядра и память исполнителя?

Примечание: Драйвер не требует больше памяти, чем Executor, поэтому Driver в большинстве случаев память должна быть меньше или равна памяти исполнителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...