Это 11-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов
1 Устранение неполадок 1: Контролируйте размер буфера на стороне уменьшения, чтобы избежать OOM
-
В процессе Shuffle задача на стороне сокращения не ждет, пока задача на стороне карты запишет все свои данные на диск, а затем извлекает их, а задача на стороне карты записывает небольшое количество данных, а задача на стороне сокращения извлекает небольшой объем данных. часть данных, а затем сразу следует агрегация, использование операторных функций и т.д.
-
Объем данных, которые может извлечь задача на стороне сокращения, определяется буфером, из которого извлекает данные задача сокращения, поскольку извлеченные данные сначала помещаются в буфер перед последующей обработкой Размер буфера по умолчанию – 48 МБ. Задача на стороне сокращения будет извлекать и вычислять одновременно, и она может не каждый раз заполняться 48 МБ данных. Она может обрабатываться, когда большую часть времени извлекается часть данных.
-
Несмотря на то, что увеличение размера буфера на стороне сокращения может уменьшить количество извлечений и улучшить производительность в случайном порядке, иногда объем данных на стороне карты очень велик, а скорость записи очень высока.В это время, когда все задачи на сторона сокращения, возможно, что все Достигнув максимального предела собственного буфера, то есть 48 МБ, В это время вместе с кодом функции агрегации, выполняемой на стороне уменьшения, может быть большое количество объектов создается, что может вызвать переполнение памяти, то есть OOM.
-
Если возникает проблема переполнения памяти на стороне уменьшения, мы можем рассмотреть возможность уменьшения размера буфера данных извлечения на стороне уменьшения, например, до 12 МБ.
-
Эта проблема возникла в реальной производственной среде, что является типичным принципом производительности для выполнения. Уменьшение буфера для извлечения данных на стороне сокращения не так просто вызвать OOM, но, соответственно, количество извлечений на стороне повторения увеличивается, что приводит к увеличению накладных расходов на передачу по сети и снижению производительности.
-
注意
: чтобы гарантировать выполнение задачи, рассмотрите возможность оптимизации производительности.
2 Устранение неполадок 2: не удалось извлечь файлы в случайном порядке, вызванные JVM GC
-
В заданиях Spark иногда возникает ошибка перетасовки файла не найдена.Это очень распространенная ошибка.Иногда после возникновения этой ошибки, если вы решите выполнить ее снова, об этой ошибке больше не будет сообщаться.
-
Возможная причина вышеуказанной проблемы заключается в том, что в операции Shuffle задача более позднего этапа хочет перейти к исполнителю, где находится задача предыдущего этапа для извлечения данных, но другая сторона выполняет GC, а выполняет GC приведет к остановке всех рабочих узлов в Executor, таких как BlockManager, сетевая связь на основе netty и т. д., это приведет к тому, что последующая задача будет тянуть данные и не тянуть их в течение длительного времени, а также ошибка перемешивания файла не найдено, будет сообщено, и второе выполнение не будет повторено.Эта ошибка возникает.
-
Можно потянуть повторные попытки и уменьшить терминал передачи данных, регулируя уменьшение концевого интервала данных, вытягивая эти два параметра, чтобы отрегулировать Performance Shuffle, значения параметра, такие, как вытягивание конца, уменьшающее количество повторных попыток увеличивает данные, и каждый после неисправности ожидания более длительного времени интервал.
val conf = new SparkConf()
.set("spark.shuffle.io.maxRetries", "60")
.set("spark.shuffle.io.retryWait", "60s")
3 Устранение неисправностей 3: Решить ошибки, вызванные различной сериализацией
- Если задание Spark сообщает об ошибке во время выполнения и сообщение об ошибке содержит такие слова, как Serializable, ошибка может быть вызвана проблемой сериализации.
- При проблемах с сериализацией следует обратить внимание на следующие три момента:
- Как пользовательский класс типа элемента RDD, он должен быть сериализуемым;
- Внешние пользовательские переменные, которые можно использовать в операторных функциях, должны быть сериализуемыми;
- Сторонние типы, не поддерживающие сериализацию, например Connection, нельзя использовать в типах элементов RDD и функциях операторов.
4 Устранение неполадок 5: Решение проблемы скачка трафика сетевой карты, вызванного режимом YARN-CLIENT
Принцип работы режима YARN-клиент показан на следующем рисунке:
-
В режиме YARN-клиент Драйвер запускается на локальном компьютере, и Драйвер отвечает за планирование всех задач, что требует частого взаимодействия с несколькими Исполнителями в кластере YARN.
-
Предположим, что есть 100 исполнителей и 1000 задач, тогда каждому исполнителю назначается 10 задач.После этого Драйвер часто связывается с 1000 задачами, запущенными на Исполнителе.Передача данных очень велика, а категория связи особенно высока. Это приводит к тому, что во время выполнения задачи Spark трафик сетевой карты локальной машины резко возрастет из-за частого и большого сетевого обмена данными.
-
Обратите внимание, что режим YARN-клиент используется только в тестовой среде, и причина использования режима YARN-клиент в том, что вы можете увидеть подробную и исчерпывающую информацию журнала.Просматривая журнал, вы можете заблокировать проблемы в программе и Избегайте производственной среды Произошел сбой.
-
В производственной среде необходимо использовать режим кластера YARN. В режиме YARN-кластера не будет всплеска трафика сетевой карты локальной машины.Если в режиме YARN-кластера возникает проблема с сетевым соединением, ее необходимо решить команде эксплуатации и обслуживания.