Fabric Runtime 1.3에서 Runtime 2.0으로 마이그레이션

Fabric Runtime 2.0은 Microsoft Fabric에서 Apache Spark 워크로드를 위한 최신 일반(GA) 및 기본 런타임입니다. 운영체제, Java, Scala, Python, R, Apache Spark, Delta Lake를 업데이트합니다. 이러한 업데이트 중 다수는 주요 버전 경계를 넘나들기 때문에, 운영 워크로드를 런타임 1.3에서 이전하기 전에 노트북, Spark 작업 정의, 라이브러리, 데이터 파이프라인을 반드시 검증하세요.

이 가이드는 마이그레이션에 영향을 줄 수 있는 변경 사항을 설명하고, 워크로드를 런타임 2.0으로 전환하는 단계별 과정을 제공합니다.

런타임 2.0에서 바뀐 점

다음 표는 Runtime 1.3과 Runtime 2.0의 주요 구성 요소를 비교합니다.

Component 런타임 1.3 런타임 2.0 이주 고려
배포 단계 지원 종료 발표 (EOSA) 조지아 운영 작업 부하를 지원되는 GA 런타임으로 마이그레이션하세요.
Apache Spark 3.5.5 4.1.1 Spark 4.1의 동작 변경 사항과 제거된 API를 검토하세요.
델타 호수 3.2 4.2 테이블을 사용하는 모든 Fabric 워크로드에서 테이블 기능과 프로토콜 호환성을 검증하세요.
Java 11 21 Java 라이브러리와 Java 네이티브 인터페이스(JNI) 의존성을 재구축하고 테스트하세요.
Scala 2.12.17 2.13.16 Scala JAR 파일을 Scala 2.13용으로 재컴파일하세요. Scala 2.12와 2.13 아티팩트는 바이너리 호환되지 않습니다.
Python 3.11 3.13 각 Python 패키지가 Python 3.13 호환 릴리스와 리눅스 휠을 제공하는지 확인하세요.
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을 위한 네이티브 라이브러리와 커스텀 바이너리 재구축.

런타임 2.0은 또한 VARIANT 데이터 타입, SQL 사용자 정의 함수, 세션 변수, 파이프 구문, 문자열 콜레이션, Python 데이터 소스 API, Python 사용자 정의 테이블 함수, 통합 PySpark 프로파일링, 새로운 구조화 스트리밍 상태 관리 및 디버깅 API 등 새로운 Apache Spark 4.1 기능을 제공합니다. 개요는 Fabric의 Runtime 2.0을 참조하세요.

호환성 변경 사항 검토

작업 공간이나 환경을 Runtime 2.0으로 변경하기 전에 다음 영역들을 검토하세요.

내장 및 사용자 지정 라이브러리

런타임 2.0은 런타임 1.3에서 제공되던 여러 기본 설치된 Python과 R 패키지를 제거했습니다. 기본 패키지 세트를 줄이면 런타임이 간소화되고 잠재적 보안 사고에 대한 공격 표면도 줄어듭니다. Runtime 1.3에서 설정 없이 제공되었던 패키지는 Runtime 2.0 환경에 명시적으로 추가해야 할 수도 있습니다.

라이브러리 매니저를 사용해 작업 부하에 필요한 패키지만 추가한 후 환경을 저장하고 게시하세요. 라이브러리 매니저는 패키지의 필수 의존성을 해결하므로 다음 인벤토리의 모든 의존성을 개별적으로 추가하지 마세요. 라이브러리를 사용할 수 있거나 그 버전이 변경되지 않았다고 가정하지 마세요:

  • Fabric 런타임 릴리스 저장소의 Runtime 1.3과 Runtime 2.0 패키지 인벤토리를 비교해 보세요.
  • 환경에 없는 PyPI, Conda, Maven, R 또는 사용자 지정 라이브러리를 추가하고 게시하세요.
  • 종속성 해결을 반복 가능하게 하기 위해 프로덕션 워크로드의 버전을 고정합니다.
  • Python 패키지가 Python 3.13을 지원하는지 확인하세요. 네이티브 확장 기능이 포함된 패키지는 호환 가능한 리눅스 휠을 제공하거나 Azure Linux 3.0에서 성공적으로 빌드해야 합니다.
  • Scala 2.12 의존성을 Scala 2.13 아티팩트로 대체하세요. 산출물 이름에는 일반적으로 Scala 이진 버전(예: _2.12 또는 _2.13)이 포함됩니다.
  • Java 21, Scala 2.13, Spark 4.1에 대해 커스텀 JAR 파일을 다시 컴파일하세요. 런타임에서 제공하는 라이브러리와 충돌이 있는지 전이 의존성을 테스트하세요.
  • Azure Linux 3.0용 커스텀 네이티브 라이브러리를 재구축하세요.

Fabric은 기존 환경의 런타임을 변경할 때 라이브러리 사양을 마이그레이션하지만, 해당 라이브러리들이 계속 호환된다는 보장은 없습니다. 의존성 해결 과정에서 충돌이 발생하면 게시가 실패합니다. 패키지 설치 옵션과 게시 모드에 대해서는 Fabric 환경에서 라이브러리 관리를 참조하세요.

기본 환경에서 제거된 패키지

다음 인벤토리에는 사용자 대상 패키지와 그 저수준 또는 전이 의존성이 포함됩니다. 이 목록에서 Runtime 1.3 워크로드가 사용하는 패키지를 검색해 보세요. 패키지가 나열되어 있다면, Runtime 2.0 환경에서 Library Manager를 통해 Python 3.13 호환 또는 R 4.5 호환 버전을 추가하세요.

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

아웃바운드 접근 보호나 관리되는 가상 네트워크가 공개 저장소 접근을 막는 경우, 호환되는 휠 파일을 다운로드하거나 패키지 미러를 호스팅하세요. 자세한 내용은 Fabric에서 제한된 네트워크 액세스 환경의 라이브러리 관리를 참조하세요.

스파크 구성 변경

런타임 2.0은 Spark 설정을 추가하거나 제거하고 일부 기본 값을 변경합니다. Fabric은 일부 설정에서 Apache Spark와 다른 기본값을 사용합니다.

마이그레이션 전에 작업 공간, 환경, 노트북, Spark 작업 정의에 대해 설정한 Spark 설정을 검토하세요. 더 이상 지원되지 않는 설정을 제거하고, 변경된 기본값에 의존하는 워크로드를 테스트하세요. 문서에서 설정을 변경하라고 지시하지 않는 한, 런타임 기본값을 사용하세요.

주요 기본 값 변경 사항

다음 표는 선택된 기준선 변경 사항을 나열합니다. 설정되지 않음은 기준선이 명시적으로 값을 설정하지 않는다는 뜻입니다; 기능이 비활성화되었다는 의미는 아닙니다.

Configuration Runtime 1.3 값 Runtime 2.0 값 이주 고려
spark.checkpoint.compress false true 체크포인트 파일은 기본적으로 압축되어 있습니다. 체크포인트 상호운용성과 저장 동작을 검증합니다.
spark.databricks.delta.optimizeWrite.enabled true 설정되지 않음 속성은 제거되지 않습니다. 테이블, 세션, 리소스 프로필 설정으로 효과적인 최적화 쓰기 동작을 검증하세요.
spark.databricks.delta.optimizeWrite.partitioned.enabled false true 파티션된 델타 테이블의 쓰기 처리량과 출력 파일 크기를 검증합니다.
spark.hadoop.parquet.block.size 1073741824 (1 GiB) 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 델타는 테이블 크기를 기반으로 목표 파일 크기를 계산합니다. 결과 파일 크기와 읽기 성능을 검증하세요.
spark.speculation.multiplier 1.5 3 Spark가 추정 실행으로 간주하기 전에 작업은 중앙값보다 세 배 느리게 진행되어야 합니다.
spark.speculation.quantile 0.75 0.9 Spark는 작업의 90%가 완료될 때까지 기다린 후 추측적 실행을 고려한다.
spark.sql.files.maxPartitionBytes 134217728 (128 MiB) 536870912 (512 MiB) 파일 스캔은 각 파티션에 더 많은 데이터를 담을 수 있습니다. 병렬성과 executor 메모리 사용을 검증하세요.
spark.sql.maxSinglePartitionBytes Long.MaxValue 128m 단일 파티션은 기본적으로 128 MiB로 제한됩니다. 큰 단일 파티션을 생성하는 쿼리를 검증하세요.
spark.sql.orc.compression.codec snappy zstd 새로운 ORC 쓰기는 기본적으로 Zstandard 압축을 사용합니다. 하위 리더와의 호환성 및 성능을 검증하세요.
spark.sql.sources.v2.bucketing.enabled false true Spark는 기본적으로 스토리지 파티션된 조인과 기타 데이터 소스 V2 버킷팅 동작을 활성화합니다. 쿼리 계획과 결과를 검증하세요.
spark.sql.sources.v2.bucketing.pushPartValues.enabled false true Spark는 Data Source V2 버킷팅과 호환되는 파티션 값을 푸시할 수 있습니다. 버킷 테이블에 대한 쿼리 계획을 검증하세요.

런타임 2.0은 LEVELDB에는 ROCKSDB 대신 spark.shuffle.service.db.backend를 사용하며, spark.shuffle.service.removeShuffle를 true로 설정합니다. Spark는 외부 셔플 서비스를 사용하여 할당 해제된 실행기의 불필요한 셔플 블록을 삭제합니다.

델타 병렬 스냅샷 로딩, 병렬 데이터 건너뛰기, 드라이버 측 스냅샷 로딩도 false에서 true로 변경됩니다. 특히 여러 Delta 테이블에 접근하는 쿼리의 경우 쿼리 지연과 드라이버 자원 사용량을 테스트하세요.

세션 시작 시 재정의 및 기본 실행

Fabric 기능 롤아웃은 세션 시작 시 기준 값을 덮어쓸 수 있습니다.

Configuration 런타임 2.0 기준값 공개 프로덕션 리전에서의 런타임 2.0 세션 시작 값 이주 고려
spark.gluten.sql.columnar.costBasedFallback.enabled false true 2026년 10월 16일에 기록된 생산 롤아웃은 Spark로의 비용 기반 폴백을 가능하게 합니다. 쿼리 계획과 성능을 다시 점검하고, 그 배포 전에 테스트한 워크로드도 포함해서요.
spark.sql.parquet.native.writer.complexTypes.enabled false true 배열, 맵, 구조체에 대해 네이티브 Parquet 쓰기와 다운스트림 읽기를 테스트하세요.

네이티브 실행 엔진을 사용할 때는 회귀 테스트에 다음 검사들을 포함하세요:

  • 열별 배치 크기 기본값이 4,096에서 10,240으로 증가하는 경우 메모리 사용량을 검증하세요.
  • 정렬 기반 컬럼 셔플 임계값이 100,000개 파티션에서 4,000개 파티션으로 감소할 때의 셔플 계획과 성능을 비교해 보세요.
  • 정규 표현식 결과와 성능을 비교하세요. 네이티브 엔진 Java 정규식 지원은 비활성화에서 활성화로 변경되며, 모든 정규식 표현식을 Spark로 폴백하는 설정도 true에서 false로 변경됩니다.

Apache Spark 4.1 기본값이 Fabric에서 다르게 유지됨

Fabric Runtime 2.0은 다음 Apache Spark 4.1 기본값을 의도적으로 덮어씁니다. 업스트림 Spark 4.1 기본값이 Fabric에서 변경되지 않은 상태로 적용된다고 가정하지 마세요.

Configuration Apache Spark 4.1 기본 Fabric 런타임 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 구성에 주의하세요.

다음과 같은 회귀 테스트를 실행하세요:

  • 타입, 정밀도, 스케일, 널 가능성을 포함한 출력 스키마.
  • 행 수 및 집계 결과.
  • 널, 오버플로우, 0으로 나누기, 그리고 유효하지 않은 캐스팅 동작.
  • 날짜, 타임스탬프, 시간대 및 간격값 결과.
  • JDBC 소스 및 싱크 타입 매핑.
  • 중요한 워크로드에 대한 쿼리 계획과 성능.

레거시 호환성 설정을 영구적인 마이그레이션 전략으로 사용하지 마세요. 임시로 실패를 격리하기 위해 사용한다면, 마이그레이션을 완료하기 전에 영향을 받은 코드를 업데이트하고 설정을 제거하세요. 전체 동작 변경 사항은 Spark SQL 마이그레이션 가이드를 참조하세요.

Spark의 Python 및 pandas API

런타임 2.0은 Python 3.11에서 Python 3.13으로 이동하며, Spark 4.1에서 도입된 PySpark 변경 사항을 포함합니다. Spark 4.1은 또한 pandas, NumPy, PyArrow의 최소 지원 버전을 상향 조정하고, 이전 릴리스에서 폐지된 API를 제거합니다.

Spark의 공통 pandas API 업데이트에는 다음이 포함됩니다:

  • Series.iteritems 및 items를 DataFrame.iteritems로 대체합니다.
  • Series.append 및 ps.concat를 DataFrame.append로 바꿉니다.
  • 범주 연산에서 제거된 inplace 매개변수를 할당으로 대체하세요.
  • 변경된 매개변수 이름과 기본값(예: inclusive 및 Series.str.replace(regex=...)).
  • 결과 열명, 인덱스 이름, dtype, 순서를 검증합니다.

전체 목록은 PySpark 마이그레이션 가이드를 참조하세요.

Java 및 Scala 애플리케이션

Scala 2.13은 Scala 2.12와 바이너리 호환되지 않습니다. 런타임 2.0에서 런타임 1.3 JAR을 재사용하면 소스 코드가 변경되지 않았더라도 클래스 로딩 오류가 발생할 수 있습니다. 별도의 런타임 2.0 아티팩트를 만들고 모든 스칼라 크로스 빌드 의존성을 업데이트하세요.

Spark 4.1은 내부 서블릿 API 참조도 javax에서 jakarta로 변경합니다. 커스텀 리스너, Spark 확장 프로그램, Spark 내부와 상호작용하는 라이브러리를 검토하세요. 기타 엔진 수준의 변경 사항은 Spark Core 마이그레이션 가이드를 참조하세요.

스트리밍 워크로드 및 커넥터

Runtime 1.3에 포함된 지원 중단된 EventHubConnector 기능이 Runtime 2.0에서는 제공되지 않습니다. Azure Event Hubs의 Kafka 호환 엔드포인트와 함께 Apache Spark Kafka 커넥터를 사용하세요. 설정 안내는 Use Apache Spark with Azure Event Hubs for Apache Kafka를 참조하세요.

적용 가능한 시나리오에서는 Fabric 이벤트스트림을 평가해 스트리밍 데이터를 수집하고 Spark Structured Streaming으로 노트북에서 처리할 수도 있습니다. 자세한 내용은 Spark Structured Streaming을 사용하여 노트북에서 Microsoft Fabric의 eventstream 쿼리를 참조하세요.

각 구조화된 스트리밍 워크로드별:

  • 런타임 2.0 쿼리가 기존 체크포인트의 복사본에서 재시작할 수 있는지 테스트하세요.
  • 상태 기반 연산, 이벤트 타임 워터마크, 트리거, 소스 및 싱크 옵션, 출력 스키마를 검증합니다.
  • 검증이 완료될 때까지 원본 데이터와 원본 체크포인트를 유지하세요.
  • 체크포인트가 호환되지 않는다면, 새로운 체크포인트로 통제된 재시작을 계획하세요. 재생되거나 건너뛴 입력을 고려하고, 다시 시작하기 전에 싱크를 멱등적으로 만드세요.

상류 호환성 변경 사항은 Structured Streaming 마이그레이션 가이드 를 검토하세요.

Delta Lake 테이블

델타 레이크는 기존 테이블에 대한 하위 호환성을 유지하므로, 런타임 2.0은 런타임 1.3에서 생성된 테이블과 함께 동작할 수 있습니다. 하지만 새로운 테이블 기능을 활성화하면 테이블의 리더 또는 라이터 프로토콜이 높아져 구형 엔진이나 다른 Fabric 경험이 테이블을 사용하는 것을 막을 수 있습니다.

초기 런타임 마이그레이션 중에:

  • 테이블 프로토콜을 업그레이드하거나 Delta Lake 4.2 기능을 활성화하지 마세요.
  • 새로 생성된 테이블과 기존 테이블의 기능과 프로토콜 버전을 점검하세요. 런타임 2.0은 true를 spark.databricks.delta.properties.defaults.enableDeletionVectors로 설정하며, 수동 기능 활성화를 피하는 것이 호환성을 유지한다고 가정하지 말고 결과 테이블 메타데이터를 검증합니다.
  • 읽기, 쓰기, 병합, 스키마 진화, 유지보수 작업, 동시 접근을 테스트합니다.
  • SQL 분석 엔드포인트, Power BI, 파이프라인, 데이터 흐름, 이벤트 스트림, 외부 엔진 등 각 테이블을 읽거나 쓰는 모든 엔진을 식별하세요.
  • 모든 소비자/사용처에서 이를 지원한 후에만 새로운 델타 기능을 활성화하세요.

델타 레이크 4.2 전용 기능은 Fabric에서 실험적인 것으로, Spark 경험에 한정되어 있습니다. 지원 매트릭스 및 기본 프로토콜 버전에 대해서는 Delta Lake 테이블 형식 상호 운용성을 참조하세요.

워크로드를 마이그레이션하세요

운영 작업 공간의 런타임을 즉시 변경하는 대신 단계별 마이그레이션을 사용하세요.

1. 런타임 1.3 작업 부하를 파악하기

다음과 같은 정보를 기록해 둡니다.

  • 노트북, Spark 작업 정의, 파이프라인, 일정, 그리고 종속 항목들.
  • 작업공간 수준 및 아이템 수준의 환경 할당
  • 레거시 호환성 설정을 포함한 Spark 구성.
  • 공공, 비공개, 커스텀 라이브러리와 해결된 버전.
  • 커스텀 JAR 파일, Python 휠, R 패키지, 네이티브 라이브러리, 초기화 로직 등이 있습니다.
  • 데이터 소스, 목적지, 비밀 정보, 연결, 네트워크 요구사항 등이 포함됩니다.
  • 델타 테이블과 그 테이블의 모든 비Spark 소비자.
  • 스트리밍 체크포인트, 스키마, 오프셋, 복구 요구사항.
  • 예상 출력 스키마, 행 수, 데이터 품질 검사, 성능 기준선.

커스텀 라이브러리, 네이티브 코드, Scala, 스트리밍 상태, 고급 델타 기능을 사용하는 워크로드를 우선순위로 지정하세요.

2. 런타임 2.0 테스트 환경 구축

별도의 환경 항목을 만들고 런타임으로 2.0(Spark 4.1, Delta 4.2) 을 선택하세요. 필요한 라이브러리를 추가하고, 환경을 저장한 뒤 게시하세요. 환경을 개발 또는 테스트 작업 공간에 있는 대표적인 노트북과 Spark 작업 정의의 사본에 첨부합니다.

운영 작업 공간이 여전히 런타임 1.3을 사용한다면, 테스트가 완료될 때까지 런타임을 변경하지 마세요. 검증 중 롤백할 때 사용할 수 있도록 기존 구성을 유지하세요.

다가오는 런타임 2.0 업데이트를 기본 채널에 도달하기 전에 검증하려면 테스트 환경에서 얼리 액세스 릴리스 채널을 사용하세요. 자세한 내용은 Fabric 런타임 릴리스 채널을 참조하세요.

3. 라이브러리 및 코드 업데이트

호환성 검토에서 확인된 변경 사항을 적용하세요:

  1. 누락된 내장 패키지를 명시적인 환경 의존성으로 대체하세요.
  2. Python 3.13, Java 21, Scala 2.13, Azure Linux 3.0을 지원하지 않는 패키지를 업그레이드하거나 교체하세요.
  3. 커스텀 JAR 파일과 네이티브 바이너리를 다시 구축하세요.
  4. 업데이트: PySpark 및 Spark의 pandas API 호출이 제거되었습니다.
  5. Kafka 커넥터로 교체하세요 EventHubConnector .
  6. 런타임 2.0에서 제공되지 않는 구성의 Spark 설정을 제거하고, 기본값이 변경된 구성의 명시적 재정의를 검토하세요.
  7. 레거시 설정에 영구적으로 의존하지 말고, 코드에서 Spark SQL 동작 차이를 해결하세요.
  8. 이 단계에서 기존 델타 테이블 기능과 프로토콜은 변경되지 않도록 하세요.

4. 호환성 및 회귀 테스트 실행

동일한 대표적인 입력을 Runtime 1.3과 Runtime 2.0에서 실행하세요. 비교하다:

  • 완료 상태, 로그, 경고, 재시도.
  • 스키마와 데이터 타입.
  • 행 단위 및 집계 결과.
  • 델타 테이블의 역사와 프로토콜.
  • 스트리밍 진행 상황, 상태, 지연, 중복 처리 등.
  • 실행 시간, 자원 사용, 그리고 비용.
  • 다운스트림 결과가 SQL 분석 엔드포인트, Power BI, 파이프라인 및 기타 소비자에 표시됩니다.

성공적인 실행뿐만 아니라 실패와 복구 테스트도 포함하세요. 테스트 세션 재시작, 작업 재실행, 체크포인트 복구, 동시 테이블 접근.

5. 런타임 2.0 출시

워크로드를 관리된 단위로 나누어 이동하기:

  1. 검증된 Runtime 2.0 환경을 배포하세요.
  2. 소수의 프로덕션 노트북이나 Spark 작업 정의에 첨부하세요.
  3. 배치를 실행하고 출력 및 다운스트림 소비자를 모니터링하세요.
  4. 관찰 기간이 끝난 후 나머지 워크로드를 계속 진행하세요.
  5. 아이템 레벨 마이그레이션이 완료된 후에만 Runtime 2.0을 워크스페이스 기본값으로 설정하세요.

작업 공간 런타임을 변경하면 새로운 Spark 세션에 영향을 줍니다. 기존 세션은 중단될 때까지 현재 런타임을 계속 사용합니다.

6. 롤백 경로 유지

런타임 2.0 관찰 기간이 끝날 때까지 런타임 1.3 환경, 산출물, 라이브러리 명세, 스트리밍 체크포인트를 유지하세요. 롤백하려면 Runtime 1.3 환경을 다시 연결하거나 이전 작업 공간 런타임을 복원하고 새 Spark 세션을 시작하세요.

Important

델타 프로토콜 업그레이드는 일반적으로 되돌릴 수 없습니다. Runtime 2.0 검증을 완료하고 모든 테이블 소비자와의 호환성을 확인하기 전까지는 프로토콜을 올리는 테이블 기능을 활성화하지 마세요.

마이그레이션 검사 목록

마이그레이션을 완료하기 전에 다음을 확인하세요:

  • [ ] 필요한 모든 Python 및 R 패키지는 명시적으로 제공되며 Python 3.13 또는 R 4.5와 호환됩니다.
  • [ ] 커스텀 JAR 파일은 Java 21, Scala 2.13, Spark 4.1을 대상으로 합니다.
  • [ ] 네이티브 의존성은 Azure Linux 3.0에서 작동합니다.
  • [ ] 작업 공간, 환경, 노트북, Spark 작업 정의 설정은 제거된 Spark 구성을 사용하지 않습니다.
  • [ ] 워크로드는 변경된 Runtime 2.0 Spark 구성 기본값에 대해 테스트됩니다.
  • [ ] Spark SQL과 PySpark 회귀 테스트가 통과합니다.
  • [ ] 이벤트 허브 워크로드는 Kafka 커넥터를 사용합니다.
  • [ ] 구조화된 스트리밍 워크로드는 설계대로 재시작되고 복구됩니다.
  • [ ] 델타 테이블 프로토콜과 기능은 모든 클라이언트와 호환됩니다.
  • [ ] 데이터 품질, 성능, 비용 결과가 귀하의 수용 기준을 충족합니다.
  • [ ] 생산 롤아웃, 모니터링, 롤백 절차가 문서화되고 테스트됩니다.