Миграция с Fabric Runtime 1.3 в Runtime 2.0

Fabric Runtime 2.0 — это последняя общедоступная (GA) и стандартная среда выполнения для рабочих нагрузок Apache Spark в Microsoft Fabric. Он обновляет операционную систему, Java, Scala, Python, R, Apache Spark и Delta Lake. Поскольку многие из этих обновлений затрагивают переходы между основными версиями, проверьте свои блокноты, определения заданий Spark, библиотеки и конвейеры данных перед тем, как переводить производственные нагрузки с Runtime 1.3.

В этом руководстве описываются изменения, которые могут повлиять на миграцию, и представлен поэтапный процесс переноса ваших рабочих нагрузок в Runtime 2.0.

Что изменилось в Runtime 2.0

В следующей таблице сравниваются основные компоненты в Runtime 1.3 и Runtime 2.0.

Component Среда выполнения 1.3 Среда выполнения 2.0 Рассмотрение миграции
Этап выпуска Объявлено о завершении поддержки (EOSA) GA Перенесите рабочие нагрузки в промышленной среде в поддерживаемую среду выполнения GA.
Apache Spark 3.5.5 4.1.1 Пересмотрите изменения в поведении Spark 4.1 и удалённые API.
Озеро Дельта 3.2 4.2 Проверяйте функции таблиц и совместимость протоколов для всех рабочих нагрузок Fabric, использующих ваши таблицы.
Java 11 двадцать один Пересоберите и протестируйте Java-библиотеки и зависимости Java Native Interface (JNI).
Scala 2.12.17 2.13.16 Перекомпилируйте JAR-файлы Scala для Scala 2.13. Артефакты Scala 2.12 и 2.13 не являются двоично совместимыми.
Python 3.11 3.13 Убедитесь, что каждый пакет Python предоставляет релиз, совместимый с Python 3.13, и wheel-пакет для Linux.
R 4.4.1 4.5.2 Переустановите и протестируйте кастомные пакеты R. SparkR устарел в Spark 4.1.
Операционная система Azure Linux 2.0 (Mariner 2.0) Azure Linux 3.0 (Mariner 3.0) Перестраивать нативные библиотеки и пользовательские бинарные файлы для Azure Linux 3.0.

Runtime 2.0 также предоставляет новые возможности Apache Spark 4.1, включая тип данных VARIANT, пользовательские функции SQL, переменные сессий, синтаксис труб, сортировку строк, API источника данных Python, пользовательские функции таблицы Python, унифицированное профилирование PySpark и новые API управления состоянием и отладки Structured Streaming. Для обзора см. Runtime 2.0 в Fabric.

Просмотреть изменения совместимости

Ознакомьтесь со следующими разделами перед переводом рабочего пространства или среды на Runtime 2.0.

Встроенные и пользовательские библиотеки

Runtime 2.0 удаляет несколько предустановленных пакетов Python и R, доступных в Runtime 1.3. Сокращение стандартного набора пакетов делает среду выполнения более легковесной и уменьшает поверхность атаки для потенциальных инцидентов безопасности. Пакет, доступный без настройки в Runtime 1.3, может потребоваться явно добавить в вашу среду Runtime 2.0.

Используйте Library Manager, чтобы добавить только те пакеты, которые требуются для вашей рабочей нагрузки, а затем сохраняйте и публикуйте окружение. Менеджер библиотеки обрабатывает зависимости, необходимые пакету, поэтому не добавляйте каждую зависимость в следующие списки по отдельности. Не предполагайте, что библиотека доступна или что её версия осталась без изменений:

  • Сравните инвентари пакетов Runtime 1.3 и Runtime 2.0 в репозитории релизов Fabric.
  • Добавьте отсутствующие библиотеки PyPI, Conda, Maven, R или пользовательские библиотеки в окружение и опубликуйте его.
  • Закрепите версии для производственных нагрузок, чтобы сделать разрешение зависимостей повторяемым.
  • Подтвердите, что пакеты Python поддерживают Python 3.13. Пакеты с нативными расширениями должны предоставлять совместимый wheel-пакет для Linux или успешно собираться на Azure Linux 3.0.
  • Замените зависимости Scala 2.12 артефактами Scala 2.13. Названия артефактов обычно включают бинарную версию Scala, например _2.12 или _2.13.
  • Перекомпилируйте пользовательские JAR-файлы под Java 21, Scala 2.13 и Spark 4.1. Проверьте транзитивные зависимости на наличие конфликтов с библиотеками, предоставленными во время выполнения.
  • Пересоздавать собственные нативные библиотеки для Azure Linux 3.0.

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

Пакеты, удалённые из стандартной среды

Следующие списки включают пользовательские пакеты и их низкоуровневые или транзитивные зависимости. Ищите в этих списках пакеты, которые использует ваша рабочая нагрузка Runtime 1.3. Если пакет указан в списке, добавьте версию, совместимую с Python 3.13 или R 4.5, через Library Manager в вашей среде Runtime 2.0.

Python-среда: 348 пакетов Conda
Package Package Package Package
_libgcc_mutex _sysroot_linux-64_curr_repodata_hack abseil-cpp alabaster
aom appdirs archspec argon2-cffi
argon2-cffi-bindings arrow arrow-cpp asgiref
asn1crypto astropy async_generator async-lru
async-timeout autopep8 aws-c-auth aws-c-cal
aws-c-common aws-c-compression aws-c-event-stream aws-c-http
aws-c-io aws-c-mqtt aws-c-s3 aws-c-sdkutils
aws-checksums aws-crt-cpp aws-sdk-cpp azure-keyvault
azure-storage babel backports backports.shutil_get_terminal_size
bcrypt beautifulsoup4 binaryornot binutils_impl_linux-64
binutils_linux-64 bitarray bkcharts black
blas bleach blinker blosc
bokeh boltons boost-cpp boto
bottleneck brunsli c-ares c-blosc2
cached-property cfitsio chardet charls
cmake cmdstan conda-package-handling conda-package-streaming
configparser contextlib2 cookiecutter curl
cython cytoolz daal4py dal
dask dask-core dataclasses datasets
dav1d dill distributed distro
django docutils entrypoints expat
fastcache flake8 flit flit-core
fmt fonts-anaconda future gcc_impl_linux-64
gcc_linux-64 geographiclib geopy get_terminal_size
gevent gflags giflib glib
glob2 glog gmp gmpy2
gobject-introspection grpc-cpp gst-plugins-base gstreamer
gtk2 gxx_impl_linux-64 gxx_linux-64 hdf5
heapdict html5lib huggingface_hub imagecodecs
imageio imagesize inflection iniconfig
intel-openmp intervaltree ipython_genutils jaraco.classes
jeepney jpeg json5 jsonpatch
jsonpointer jupyter_console jupyter_events jupyter-lsp
jupyter_server jupyter_server_terminals jupyterlab jupyterlab_pygments
jupyterlab_server jxrlib kernel-headers_linux-64 keyring
lazy_loader lazy-object-proxy liac-arff libaec
libarchive libavif libclang libcurl
libev libevent libgcc-devel_linux-64 libgfortran-ng
liblief libllvm14 libmamba libmambapy
libnghttp2 libprotobuf libsolv libspatialindex
libssh2 libstdcxx-devel_linux-64 libthrift libtool
libwebp libzopfli lightning-utilities llvm-openmp
llvmlite locket lxml lz4
lz4-c lzo make markdown
mccabe menuinst minio mistune
mkl mkl_fft mkl_random mkl-service
mock more-itertools mpc mpfr
mpi mpich mpmath msgpack-python
msrest multipledispatch multiprocess mysql
nbclassic nbclient nbconvert nest-asyncio
networkx ninja ninja-base nose
notebook notebook-shim nspr nss
numba numexpr numpy-base numpydoc
oauthlib olefile openml orc
overrides pandocfilters paramiko partd
patch patchelf path path.py
pathlib2 pep8 pickleshare pkginfo
pluggy ply poppler poppler-data
prettytable prometheus_client py-cpuinfo py-lief
pybind11-abi pycodestyle pycosat pycurl
pydocstyle pyerfa pyflakes pynacl
pyopenssl pyqt pyqt5-sip pyrsistent
pytables pytest python-fastjsonschema python-json-logger
python-libarchive-c python-lmdb python-slugify python-xxhash
pytorch pytorch-lightning pytorch-mutex pywavelets
qdarkstyle qstylizer qt qt-main
qt-webengine qtawesome qtconsole qtpy
re2 reproc reproc-cpp requests-oauthlib
rfc3339-validator rfc3986-validator rhash ripgrep
rtree s2n safetensors scikit-build
scikit-image scikit-learn-intelex secretstorage send2trash
shap simplegeneric singledispatch sip
slicer snappy snowballstemmer sortedcollections
sortedcontainers soupsieve sphinx sphinxcontrib
sphinxcontrib-applehelp sphinxcontrib-devhelp sphinxcontrib-htmlhelp sphinxcontrib-jsmath
sphinxcontrib-qthelp sphinxcontrib-serializinghtml sphinxcontrib-websupport sqlite
sympy sysroot_linux-64 tbb tbb-devel
tbb4py tblib terminado testpath
text-unidecode textdistance tifffile tinycss2
tokenizers toml tomli-w toolz
torchdata torchmetrics transformers truststore
typed-ast ujson unicodecsv unidecode
utf8proc webencodings websocket-client wheel
whichcraft xlsxwriter xlwt xmltodict
xxhash xyzservices xz yaml-cpp
yapf zfp zict zlib
zope zope.event zope.interface zstandard
Среда Python: 24 pip-пакета
Package Package Package Package
accelerate astor dash dash-core-components
dash-cytoscape dash-html-components dash-table docker
interpret interpret-core json-tricks nni
nvidia-ml-py pyperclip pythonwebhdfs responses
retrying salib schema seqeval
simplejson tensorboardx thop typeguard
Среда R: 67 пакетов Conda
Package Package Package Package
_libgcc_mutex _sysroot_linux-64_curr_repodata_hack blosc cfitsio
expat fmt freetype freexl
geos geotiff giflib hdf4
hdf5 json-c kealib lcms2
libaec libarchive libgdal libgdal-core
libgdal-fits libgdal-grib libgdal-hdf4 libgdal-hdf5
libgdal-jp2openjpeg libgdal-kea libgdal-netcdf libgdal-pdf
libgdal-pg libgdal-postgisraster libgdal-tiledb libgdal-xls
libkml libnetcdf libnsl librttopo
libspatialite libsqlite libudunits2 libv8
libzip lzo minizip nspr
nss openjpeg poppler poppler-data
proj r-classint r-gsl r-jose
r-mgcv r-s2 r-sf r-units
r-wk spdlog sqlite tiledb
uriparser xerces-c xorg-kbproto xorg-renderproto
xorg-xextproto xorg-xproto xz

Note

Если защита исходящего доступа или управляемая виртуальная сеть не позволяет получить доступ к публичным репозиториям, скачайте совместимые файлы wheel или разместите зеркало пакетов. Для инструкций см. раздел «Управление библиотеками с ограниченным доступом к сети» в Fabric.

Изменения конфигурации Spark

Runtime 2.0 добавляет и удаляет настройки Spark, а также меняет некоторые значения по умолчанию. Fabric также использует другие настройки по умолчанию, чем Apache Spark, для некоторых настроек.

Перед миграцией ознакомьтесь с настройками Spark, которые вы настроили для рабочих пространств, окружений, блокнотов и определений заданий Spark. Удалите настройки, которые больше не поддерживаются, и протестируйте рабочие нагрузки, зависящие от изменившихся значений по умолчанию. Используйте настройки времени выполнения по умолчанию, если только документация не указывает изменить какую-либо настройку.

Заметные изменения значений по умолчанию

В следующей таблице перечислены выбранные базовые изменения. Not set означает, что базовая линия явно не устанавливает значение; это не означает, что функция отключена.

Configuration значение Runtime 1.3 Значение времени выполнения 2.0 Рассмотрение миграции
spark.checkpoint.compress false true Файлы контрольных точек по умолчанию сжаты. Проверьте совместимость чекпоинтов и поведение при хранении данных.
spark.databricks.delta.optimizeWrite.enabled true Не установлено Свойство не удаляется. Проверьте фактическое поведение оптимизированной записи с помощью настроек таблицы, сессии и профиля ресурсов.
spark.databricks.delta.optimizeWrite.partitioned.enabled false true Проверьте пропускную способность записи и размеры выходных файлов для разделённых таблиц Delta.
spark.hadoop.parquet.block.size 1073741824 (1 ГиБ) 134217728 (128 MiB) Модули записи Parquet используют меньшие блоки. Проверяйте размеры файлов и производительность чтения в последующих процессах.
spark.microsoft.delta.optimize.fast.enabled false true OPTIMIZE Может пропустить работу, если не выполнены критерии по количеству файлов или оценочному размеру уплотнения. Подтвердите результаты обслуживания.
spark.microsoft.delta.optimize.fileLevelTarget.enabled false true Файлы, которые ранее достигали как минимум половины целевого размера после компактизации, не сжимаются снова. Проверьте верстку файла после OPTIMIZE.
spark.microsoft.delta.targetFileSize.adaptive.enabled false true Delta рассчитывает размер целевого файла на основе размера таблицы. Проверьте размеры полученных файлов и производительность чтения.
spark.speculation.multiplier 1.5 3 Задание должно идти в три раза медленнее медианы, прежде чем Спарк рассмотрит его для спекулятивного выполнения.
spark.speculation.quantile 0.75 0.9 Spark ждёт завершения 90% задач, прежде чем приступить к спекулятивному выполнению.
spark.sql.files.maxPartitionBytes 134217728 (128 MiB) 536870912 (512 MiB) Сканированные файлы могут вместить больше данных в каждый раздел. Проверьте параллелизм и использование памяти исполнителя.
spark.sql.maxSinglePartitionBytes Long.MaxValue 128m Один раздел по умолчанию ограничен до 128 МиБ. Проверяйте запросы, которые создают большие отдельные партиции.
spark.sql.orc.compression.codec snappy zstd Новые записи в ORC по умолчанию используют сжатие Zstandard. Проверьте совместимость и производительность с последующими считывателями.
spark.sql.sources.v2.bucketing.enabled false true Spark по умолчанию поддерживает соединения с секционированием по хранилищу и другое поведение бакетирования Data Source V2. Проверяйте планы и результаты запросов.
spark.sql.sources.v2.bucketing.pushPartValues.enabled false true Spark может отправлять совместимые значения разделов для бакетизации источника данных V2. Проверяйте планы запросов для бакетированных таблиц.

Runtime 2.0 также использует ROCKSDB вместо LEVELDB для spark.shuffle.service.db.backend и устанавливает spark.shuffle.service.removeShuffle на true. Spark использует внешний shuffle-сервис для удаления ненужных shuffle-блоков для освобождённых исполнителей.

Дельта-параллельная загрузка снимков, параллельный пропуск данных и загрузка снимков на стороне драйвера также меняются с false на true. Тестируйте задержку запросов и использование ресурсов драйверов, особенно для запросов, которые обращаются к нескольким таблицам Delta.

Переопределения запуска сеанса и нативное выполнение

Внедрение функций Fabric может переопределять базовые значения при начале сессии.

Configuration Базовое значение Runtime 2.0 Значение старта сессии в общедоступных производственных регионах в Runtime 2.0 Рассмотрение миграции
spark.gluten.sql.columnar.costBasedFallback.enabled false true Запуск в производственную среду, зафиксированный 16 октября 2026 года, обеспечивает резервное переключение на Spark на основе стоимости. Перепроверьте планы запросов и производительность, включая рабочие нагрузки, протестированные до того развертывания.
spark.sql.parquet.native.writer.complexTypes.enabled false true Тестируйте нативные операции записи в Parquet и последующие чтения массивов, ассоциативных массивов и структур.

При использовании нативного движка исполнения включайте следующие проверки в регрессионные тесты:

  • Подтвердите использование памяти с увеличением столбцового пакетного размера по умолчанию с 4 096 до 10 240.
  • Сравните планы перемешивания и производительность с порогом перемешивания на основе сортировки, который снизился с 100 000 до 4 000 партиций.
  • Сравните результаты регулярного выражения и производительность. Поддержка regex на нативном движке Java меняется с отключённой на включённую, а настройка, переводящая обработку всех regex-выражений на Spark, меняется с true на false.

Значения по умолчанию Apache Spark 4.1 обрабатываются иначе в Fabric

Fabric Runtime 2.0 намеренно переопределяет следующие параметры по умолчанию Apache Spark 4.1. Не думайте, что стандартная настройка Spark 4.1 из upstream в Fabric остаётся без изменений.

Configuration Apache Spark 4.1 по умолчанию Значение Fabric Runtime 2.0
spark.eventLog.compress true false
spark.eventLog.rolling.enabled true false
spark.sql.ansi.enabled true false
spark.sql.catalog.spark_catalog builtin org.apache.spark.sql.delta.catalog.DeltaCatalog
spark.sql.hive.metastore.version 2.3.10 2.3.2

Поведение Spark SQL и DataFrame

Spark 4.1 вводит изменения поведения, которые могут изменить результаты запросов или привести к сбою запросов, которые ранее принимались. Обратите особое внимание на поведение ANSI SQL, касты, операции с датами и временными метками, типы данных, отображения JDBC и устаревшие конфигурации SQL.

Проведите регрессионные тесты и сравните:

  • Выходные схемы, включая тип, точность, разрядность и допустимость NULL.
  • Количество строк и совокупные результаты.
  • Ноль, переполнение, деление на ноль и поведение при недопустимом приведении типов.
  • Дата, метка времени, часовой пояс и результаты интервалов.
  • Отображения типа источника и приемника JDBC.
  • Планы запросов и производительность для критически важных нагрузок.

Не используйте устаревшие настройки совместимости как постоянную стратегию миграции. Если вы временно используете его для выявления сбоя, обновите затронутый код и удалите эту настройку перед завершением миграции. Полный набор изменений в поведении см. в руководстве по миграции Spark SQL.

API Python и pandas на Spark

Runtime 2.0 переходит с Python 3.11 на Python 3.13 и включает изменения PySpark, введённые в Spark 4.1. Spark 4.1 также повышает минимально поддерживаемые версии pandas, NumPy и PyArrow и удаляет API, которые были устаревшими в предыдущих версиях.

Обновления общего API pandas в Spark включают:

  • Заменить DataFrame.iteritems и Series.iteritems на items.
  • Заменить DataFrame.append и Series.append на ps.concat.
  • Заменить удалённые inplace параметры в категорияльных операциях на присваивания.
  • Проверьте изменённые имена параметров и значения по умолчанию, такие как inclusive и Series.str.replace(regex=...).
  • Проверьте имена столбцов результатов, имена индексов, dtypes и порядок.

Полный список см. руководство по миграции PySpark.

Приложения Java и Scala

Scala 2.13 не является бинарно совместимой с Scala 2.12. Повторное использование JAR Runtime 1.3 в Runtime 2.0 может вызывать ошибки при загрузке классов даже без изменений исходного кода. Создайте отдельный артефакт Runtime 2.0 и обновите все кросс-билдированные зависимости Scala.

Spark 4.1 также меняет внутренние ссылки на API сервлетов с javax на jakarta. Проверьте пользовательские слушатели, расширения Spark и библиотеки, взаимодействующие с внутренними механизмами Spark. Для других изменений на уровне движка смотрите руководство по миграции Spark Core.

Потоковые нагрузки и коннекторы

Устаревший EventHubConnector, включённый в Runtime 1.3, недоступен в Runtime 2.0. Используйте коннектор Apache Spark Kafka с совместимой с Kafka конечной точкой для Центры событий Azure. Инструкции по настройке см. в статье Use Apache Spark with Центры событий Azure for Apache Kafka.

Для соответствующих сценариев вы также можете использовать Fabric Eventstream для загрузки потоковых данных и обработки их в блокноте с Spark Structured Streaming. Для получения дополнительной информации смотрите Запрос к eventstream в Microsoft Fabric из записной книжки с Spark Structured Streaming.

Для каждой рабочей нагрузки Structured Streaming:

  • Проверьте, может ли запрос Runtime 2.0 перезапуститься с копии существующей контрольной точки.
  • Проверяйте операции с сохранением состояния, водяные знаки времени события, триггеры, опции источника и поглотителя, а также схемы вывода.
  • Сохраняйте исходные данные и исходную контрольную точку сохранения доступными до завершения валидации.
  • Если контрольная точка несовместима, планируйте контролируемый перезапуск с новой контрольной точкой. Учтите повторный или пропущенный ввод и сделайте приемник идемпотентным перед перезапуском.

Ознакомьтесь с руководством по миграции Structured Streaming на предмет изменений совместимости в вышестоящих компонентах.

Таблицы Delta Lake

Delta Lake поддерживает обратную совместимость с существующими таблицами, поэтому Runtime 2.0 может работать с таблицами, созданными Runtime 1.3. Однако включение новой функции таблицы может повысить протокол чтения или записи таблицы и предотвратить использование таблицы старыми движками или другими средствами Fabric.

Во время начальной миграции среды выполнения:

  • Не обновляйте протоколы таблиц и не включайте функции Delta Lake 4.2.
  • Проверьте характеристики и версии протоколов как новосозданных таблиц, так и существующих. Runtime 2.0 устанавливает spark.databricks.delta.properties.defaults.enableDeletionVectors на true; проверьте полученные метаданные таблицы, вместо того чтобы предполагать, что отказ от ручного включения функций сохраняет совместимость.
  • Тестовое чтение, запись, слияние, эволюция схемы, операции обслуживания и одновременный доступ.
  • Определите каждый движок, который читает или записывает каждую таблицу, включая конечную точку аналитики SQL, Power BI, конвейеры, потоки данных, потоки событий и внешние движки.
  • Включайте новую функцию Delta только после того, как все консьюмеры её поддержат.

Особенности, специфичные для Delta Lake 4.2, экспериментальны в Fabric и доступны только в средах Spark. Для матрицы поддержки и версий протокола по умолчанию см. функциональную совместимость формата таблиц Delta Lake.

Перенесите рабочие нагрузки

Используйте поэтапную миграцию вместо того, чтобы сразу менять среду выполнения для производственного рабочего пространства.

1. Инвентаризируйте свои рабочие нагрузки Runtime 1.3

Запишите следующие сведения:

  • Блокноты, определения заданий Spark, конвейеры, расписания и зависимые элементы.
  • Назначения сред на уровне рабочего пространства и объекта.
  • Настройки Spark, включая любые настройки совместимости с устаревшими версиями.
  • Публичные, частные и пользовательские библиотеки с их итоговыми версиями.
  • Пользовательские JAR-файлы, wheel-пакеты Python, R-пакеты, нативные библиотеки и логика инициализации.
  • Источники данных, назначения, секретные данные, соединения и требования к сети.
  • Таблицы Delta и все потребители этих таблиц, не входящие в Spark.
  • Контрольные точки потоковой передачи, схемы, офсеты и требования к восстановлению.
  • Ожидаемые схемы вывода, количество строк, проверки качества данных и базовые показатели производительности.

Отдавайте приоритет рабочим нагрузкам, использующим пользовательские библиотеки, нативный код, Scala, потоковое состояние или продвинутые функции Delta.

2. Создать тестовую среду Runtime 2.0

Создайте отдельный элемент среды и выберите 2.0 (Spark 4.1, Delta 4.2) в качестве среды выполнения. Добавьте необходимые библиотеки, сохраните окружение и опубликуйте его. Прикрепляйте окружение к копиям представительных записных книжек и определениям заданий Spark в рабочем пространстве для разработки или тестирования.

Если ваше рабочее пространство всё ещё использует Runtime 1.3, не меняйте его Runtime до завершения тестирования. Оставьте существующую конфигурацию доступной для отката во время валидации.

Чтобы проверить предстоящие обновления Runtime 2.0 до того, как они попадут на канал по умолчанию, используйте канал раннего доступа в вашей тестовой среде. Для получения дополнительной информации смотрите каналы выпуска среды выполнения Fabric.

3. Обновите библиотеки и код

Примените изменения, выявленные при проверке совместимости:

  1. Замените отсутствующие встроенные пакеты на явные зависимости среды.
  2. Обновляйте или заменяйте пакеты, которые не поддерживают Python 3.13, Java 21, Scala 2.13 или Azure Linux 3.0.
  3. Перестраивайте пользовательские JAR-файлы и нативные бинарные файлы.
  4. В обновлении удалены вызовы PySpark и pandas API on Spark.
  5. Замените EventHubConnector на коннектор Kafka.
  6. Удалите настройки Spark для конфигураций, недоступных в Runtime 2.0, и просмотрите явно заданные переопределения конфигураций, чьи значения по умолчанию изменились.
  7. Разрешите различия в поведении Spark SQL в коде, а не постоянно полагаться на устаревшие настройки.
  8. Сохраняйте существующие функции и протоколы таблицы Delta без изменений на этом этапе.

4. Запустите тесты совместимости и регрессии

Запустите те же репрезентативные входные данные на Runtime 1.3 и Runtime 2.0. Сравнить:

  • Статус завершения, журналы, предупреждения и повторы.
  • Схемы и типы данных.
  • Результаты на уровне строк и агрегированные результаты.
  • История и протокол таблицы Delta.
  • Прогресс потоковой передачи, состояние, задержка и обработка дубликатов.
  • Время выполнения, использование ресурсов и стоимость.
  • Далее результаты поступают в endpoint аналитики SQL, Power BI, конвейеры и другие потребители.

Включайте тесты на отказы и восстановление, а не только успешные прогоны. Перезапуск тестовых сессий, повторные попытки выполнения заданий, восстановление из контрольных точек и параллельный доступ к таблице.

5. Развернуть Runtime 2.0

Перемещайте рабочие нагрузки контролируемыми партиями:

  1. Опубликуйте проверенную среду Runtime 2.0.
  2. Прикрепляйте его к небольшому набору производственных блокнотов или определениям заданий Spark.
  3. Запускайте пакетное задание и отслеживайте выходные данные и последующих потребителей.
  4. Продолжайте выполнять оставшиеся рабочие нагрузки после периода наблюдения.
  5. Установите Runtime 2.0 в качестве значения по умолчанию для рабочего пространства только после завершения миграции на уровне элемента.

Изменение среды выполнения рабочего пространства влияет на новые сессии Spark. Существующие сессии продолжают использовать текущую среду выполнения до тех пор, пока не останавливаются.

6. Сохраняйте возможность отката

Сохраняйте среду Runtime 1.3, артефакты, спецификации библиотеки и контрольные точки потоковой обработки до окончания периода наблюдения Runtime 2.0. Чтобы откатить назад, подключите среду Runtime 1.3 или восстановите предыдущую среду выполнения рабочей области и запустите новую сессию Spark.

Important

Обновление протокола Delta, как правило, необратимо. Не включайте функции таблиц, повышающие протокол, пока не завершите валидацию Runtime 2.0 и не подтвердите совместимость с каждым потребителем таблиц.

Контрольный список миграции

Перед завершением миграции убедитесь, что:

  • [ ] Все необходимые пакеты Python и R явно доступны и совместимы с Python 3.13 или R 4.5.
  • [ ] Пользовательские JAR-файлы нацелены на Java 21, Scala 2.13 и Spark 4.1.
  • [ ] Нативные зависимости работают на Azure Linux 3.0.
  • [ ] Настройки Workspace, окружения, блокнота и определения задания Spark не используют удаленные конфигурации Spark.
  • [ ] Рабочие нагрузки тестируются с учётом изменённых настроек Runtime 2.0 Spark по умолчанию.
  • [ ] Тесты регрессии Spark SQL и PySpark проходят.
  • [ ] Рабочие нагрузки Event Hubs используют разъём Kafka.
  • [ ] Рабочие нагрузки Structured Streaming перезапускаются и восстанавливаются должным образом.
  • [ ] Протоколы и функции Delta Table остаются совместимы со всеми потребителями.
  • [ ] Качество данных, производительность и стоимость соответствуют вашим критериям приёма.
  • [ ] Процедуры развертывания в продуктивной среде, мониторинга и отката документируются и тестируются.