Это 12-й день моего участия в Gengwen Challenge, пожалуйста, проверьте подробности мероприятия:Обновить вызов
5 Устранение неполадок 4: Решите проблему, вызванную тем, что операторная функция возвращает NULL
- В некоторых операторных функциях нам нужно иметь возвращаемое значение, но в некоторых случаях мы не хотим иметь возвращаемое значение.В настоящее время, если мы напрямую вернем NULL, будет сообщено об ошибке, например Scala.Math( NULL) исключение.
- Если вы столкнулись с некоторыми ситуациями и не хотите возвращать значение, вы можете решить это следующими способами:
- Возвращает специальные значения, а не NULL, например "-1";
- После получения RDD с помощью оператора можно выполнить операцию фильтрации над RDD, чтобы отфильтровать данные и отфильтровать данные, значение которых равно -1;
- После использования оператора фильтра продолжайте вызывать оператор объединения для оптимизации.
6 Устранение неполадок Шесть: решить проблему, связанную с тем, что переполнение памяти стека JVM в режиме YARN-CLUSTER не может быть выполнено
Принцип работы режима YARN-кластера показан на следующем рисунке:
-
Когда задание Spark содержит содержимое SparkSQL, его можно запустить в режиме клиента YARN, но не удастся отправить и запустить в режиме кластера YARN (сообщается об ошибке OOM).
- В режиме клиента YARN драйвер запускается на локальном компьютере. Конфигурация PermGen JVM, используемая Spark, представляет собой файл искрового класса на локальном компьютере. Размер постоянного поколения JVM составляет 128 МБ. В режиме YARN-кластера Драйвер запускается на узле в кластере YARN, используя настройки по умолчанию без настройки, а размер постоянной генерации PermGen составляет 82 МБ.
- SparkSQL должен выполнять очень сложный семантический анализ SQL, преобразование синтаксического дерева и т. д., что очень сложно.Если сам оператор SQL очень сложный, это может привести к потере производительности и занятию памяти, особенно занятие PermGen будет больше. .
-
Поэтому, если PermGen занимает более 82 МБ, но менее 128 МБ, он будет работать в режиме YARN-клиент, но не может работать в режиме YARN-кластера.
-
Решение вышеуказанной проблемы заключается в увеличении мощности PermGen.Необходимо установить соответствующие параметры в скрипте spark-submit.Метод настройки показан в списке кодов.
-
пройти через
--conf spark.driver.extraJavaOptions="-XX:PermSize=128M -XX:MaxPermSize=256M"Установлен размер постоянного поколения драйвера, по умолчанию 128 МБ, а максимум 256 МБ, чтобы избежать вышеупомянутых проблем.
7 Устранение неполадок седьмой: решение переполнения памяти стека JVM, вызванного SparkSQL
-
Когда в операторе SQL SparkSQL есть сотни или тысячи ключевых слов или, может произойти переполнение памяти стека JVM на стороне драйвера.
-
Переполнение памяти стека JVM в основном связано с вызовом слишком большого количества уровней методов, что приводит к большому количеству очень глубокой рекурсии, превышающей предел глубины стека JVM. (Мы предполагаем, что когда SparkSQL имеет большое количество операторов or, при синтаксическом анализе SQL, таком как преобразование в синтаксическое дерево или создание плана выполнения, обработка или является рекурсивной. Когда имеется много операторов or, будет происходить много рекурсии. )
-
В настоящее время рекомендуется разделить оператор SQL на несколько операторов SQL для выполнения и постараться, чтобы каждый оператор SQL содержал менее 100 предложений. Согласно фактическому тесту производственной среды, ключевое слово или оператора SQL контролируется в пределах 100, что обычно не вызывает переполнения памяти стека JVM.
8 Устранение неполадок 8: Использование постоянства и контрольной точки
-
Сохранение Spark в большинстве случаев не является проблемой, но иногда данные могут быть потеряны. Если данные потеряны, потерянные данные необходимо пересчитать, а затем кэшировать и использовать после расчета. Чтобы избежать потери данных, вы можете выбрать контрольную точку этого RDD, то есть сохраняйте копию данных в отказоустойчивой файловой системе (такой как HDFS).
-
После кэширования RDD и создания контрольной точки, если обнаружится, что кэш отсутствует, он сначала проверит, существуют ли данные контрольной точки.Если они существуют, данные контрольной точки будут использоваться без перерасчета. То есть контрольную точку можно рассматривать как гарантийный механизм кэша, в случае сбоя кэша используются данные контрольной точки.
-
Преимущество использования контрольной точки заключается в повышении надежности заданий Spark: при возникновении проблемы с кешем нет необходимости пересчитывать данные.