Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server 2019 (15.x)
Это важно
Надстройка "Кластеры больших данных Microsoft SQL Server 2019" будет прекращена. Поддержка кластеров больших данных SQL Server 2019 завершится 28 февраля 2025 г. Все существующие пользователи SQL Server 2019 с Software Assurance будут полностью поддерживаться на этой платформе, а программное обеспечение будет продолжать поддерживаться с помощью накопительных обновлений для SQL Server до этого времени. Для получения дополнительной информации см. запись блога об объявлении и параметры работы с большими данными на платформе Microsoft SQL Server.
В этой статье содержатся важные сведения и рекомендации по переносу рабочих нагрузок Apache Spark 2.4 в Spark версии 3.1. Это необходимо для обновления кластеров больших данных SQL Server с CU12 до CU13 и более поздних версий.
Введение в Apache Spark 3 на кластерах больших данных SQL Server
До накопительного обновления 12 (CU12) кластеры больших данных опирались на версию Apache Spark 2.4, которая достигла конца поддержки в мае 2021 года. В соответствии с нашими обязательствами по непрерывному улучшению возможностей больших данных и машинного обучения, предоставляемых подсистемой Apache Spark, накопительный пакет обновления 13 (CU13) предоставляет текущий выпуск Apache Spark версии 3.1.2.
Новая базовая производительность
Эта новая версия Apache Spark обеспечивает преимущества производительности по сравнению с рабочими нагрузками обработки больших данных. Используя эталонную рабочую нагрузкуTCP-DS 10TB в наших тестах, мы смогли сократить время выполнения с 4,19 часов до 2,96 часов, а 29,36% улучшение достигнуто только путем переключения подсистем с использованием одного и того же аппаратного и профиля конфигурации в кластерах больших данных SQL Server, никаких дополнительных оптимизаций приложений. Среднее улучшение времени выполнения отдельных запросов составляет 36%.
Руководство по обновлению
Spark 3 — это основной выпуск и содержит критические изменения. Следуя той же установленной методике в вселенной SQL Server, рекомендуется:
- Просмотрите эту статью полностью.
- Ознакомьтесь с официальным руководством по миграции Apache Spark 3.
- Параллельное развертывание нового кластера больших данных с накопительным пакетом обновления 13 (CU13) с текущей средой.
- (Необязательно) Используйте новую возможность распределенного копирования azdata HDFS , чтобы иметь подмножество данных, необходимых для проверки.
- Перед обновлением проверьте текущую рабочую нагрузку с помощью Spark 3.
- Повторно выполняет оптимизацию Spark в стратегиях определения кода и таблицы. Spark 3 обеспечивает новые улучшения в механизме перетасовки, секционирования и адаптивного выполнения запросов (Adaptive Query Execution). Это отличная возможность переоценить предыдущие решения и попробовать использовать более новые возможности подсистемы вне коробки.
Что происходит во время обновления кластера?
Процесс обновления кластера развертывает pod-ы Spark с новой версией и обновленной средой выполнения для Apache Spark. После обновления компоненты Spark 2.4 больше не будут.
Постоянные изменения конфигурации, внесенные через платформу конфигурации, будут сохранены.
Пользовательские библиотеки и артефакты, загруженные непосредственно в HDFS, будут сохранены. Тем не менее убедитесь, что эти библиотеки и артефакты совместимы с Spark 3.
Предупреждение
Настройки, внесенные непосредственно в модули pod, будут потеряны, убедитесь, что вы проверяете и повторно применяете их, если они по-прежнему применимы к Spark 3.
Кардинальные изменения
Spark 3 не полностью совместим с 2.4, критические изменения в основном вызваны тремя частями:
- Scala 2.12, используемая Spark 3, несовместима с Scala 2.11, используемой Spark 2.4
- Изменения и устаревшие функции API Spark версии 3
- Среда выполнения кластеров больших данных SQL Server для обновления библиотеки Apache Spark
Scala 2.12, используемая Spark 3, несовместима с Scala 2.11
При выполнении заданий Spark, запущенных из jars Scala 2.11, необходимо пересобрать их, используя Scala 2.12. Scala 2.11 и 2.12 в основном совместимы с исходным кодом, но не совместимы с двоичными файлами. Дополнительные сведения см. в статье Scala 2.12.0.
Ниже приведены изменения:
- Измените версию Scala для всех зависимостей Scala.
- Измените версию Spark для всех зависимостей Spark.
- Изменение всех зависимостей Spark предоставило область, за исключением внешних зависимостей, таких как
spark-sql-kafka-0-10
.
Ниже приведен пример pom.xml.
<properties>
<spark.version>3.1.2</spark.version>
<scala.version.major>2.12</scala.version.major>
<scala.version.minor>10</scala.version.minor>
<scala.version>${scala.version.major}.${scala.version.minor}</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version.major}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version.major}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-kafka-0-10_${scala.version.major}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
Изменения и устаревшие функции API Spark версии 3
Ознакомьтесь с официальным руководством по миграции Apache Spark 3, в котором подробно рассматриваются все изменения API.
Ниже приведены некоторые захваченные основные моменты:
Изменение, нарушающее совместимость | Действие |
---|---|
spark-submit параметры yarn-client и yarn-clustermodes удалены в Spark 3 |
Вместо этого используются типы spark-submit --master yarn --deploy-mode client или --deploy-mode cluster .Дополнительные сведения см. https://spark.apache.org/docs/latest/running-on-yarn.html |
HiveContext Класс удаляется |
Вместо нее следует использовать SparkSession.builder.enableHiveSupport() . |
Порядок аргумента обратно в методе TRIM | Используйте TRIM(str, trimStr) вместо TRIM(trimStr, str) |
Из-за обновления до Scala 2.12 DataStreamWriter.foreachBatch больше не совместим с программой Scala. |
Обновите исходный код Scala, чтобы различать функцию Scala и лямбда-код Java. |
Среда выполнения кластеров больших данных SQL Server для обновления библиотеки Apache Spark
Как описано средой выполнения Apache Spark в кластерах больших данных SQL Server, все библиотеки Python, R и Scala по умолчанию были обновлены в релизе CU13. Кроме того, многие библиотеки были добавлены, чтобы обеспечить более широкий интерфейс.
- Убедитесь, что рабочая нагрузка работает с более новым набором библиотек.
- Проверьте, является ли пользовательская загруженная библиотека частью базовой базы пакетов по умолчанию и настройте спецификации заданий, чтобы удалить пользовательскую библиотеку, чтобы разрешить задание использовать отправленную библиотеку.
Часто задаваемые вопросы
Как решить странный java.lang.NoSuchMethodError или java.lang.ClassNotFoundException
Эта ошибка, скорее всего, вызвана конфликтом версий Spark или Scala. Дважды проверьте нижеизложенное и перестройте свой проект.
- Убедитесь, что все версии Scala обновлены.
- Убедитесь, что все зависимости Spark обновляются с правильной версией scala и версией Spark.
- Убедитесь, что все зависимости Spark предоставляют область, кроме spark-sql-kafka-0-10.
SparkUpgradeException из-за изменения режима календаря
В модели календаря Spark 3.0 есть изменения. При написании столбца календаря в Spark SQL может отображаться исключение:
Caused by: org.apache.spark.SparkUpgradeException:
You may get a different result due to the upgrading of Spark 3.0:
writing dates before 1582-10-15 or timestamps before 1900-01-01T00:00:00Z into Parquet INT96 files can be dangerous,
as the files may be read by Spark 2.x or legacy versions of Hive later,
which uses a legacy hybrid calendar that is different from Spark 3.0+'s Proleptic Gregorian calendar.
See more details in SPARK-31404.
You can set spark.sql.legacy.parquet.int96RebaseModeInWrite to 'LEGACY' to
rebase the datetime values w.r.t. the calendar difference during writing, to get maximum interoperability.
Or set spark.sql.legacy.parquet.int96RebaseModeInWrite to 'CORRECTED' to
write the datetime values as it is, if you are 100% sure that the written files
will only be read by Spark 3.0+ or other systems that use Proleptic Gregorian calendar.
Решение: Задайте для конфигурации spark.sql.legacy.parquet.int96RebaseModeInWrite значение LEGACY или CORRECTED, как описано выше. Ниже приведено возможное решение в коде PySpark:
spark.conf.set("spark.sql.legacy.parquet.int96RebaseModeInWrite","CORRECTED")
Дальнейшие шаги
Дополнительные сведения см. в разделе "Общие сведения о кластерах больших данных SQL Server".