Share via


Azure Databricks에 대해 기존 Apache Spark 코드 조정

이 문서에서는 Azure Databricks에서 실행되도록 기존 Apache Spark 워크로드를 조정하는 데 필요한 변경 사항을 간략하게 설명합니다. 온-프레미스 클러스터, 사용자 지정 클라우드 기반 인프라 또는 다른 엔터프라이즈 Apache Spark 제품에서 Azure Databricks로 이동하든 대부분의 워크로드는 프로덕션 환경에 들어가기 위해 몇 가지 변경만 필요합니다. Azure Databricks는 사용자 지정 최적화를 도입하고, 인프라를 구성 및 배포하고, Databricks Runtime에서 종속성을 유지 관리하여 Apache Spark의 성능을 확장, 간소화 및 개선합니다.

Important

Apache Spark 버전을 업그레이드할 때 구문 호환성이 손상되는 변경이 있을 수 있습니다. Databricks 런타임 릴리스 정보 버전 및 호환성 및 Spark 마이그레이션 가이드를 참조하세요.

parquetdelta로 변경

Databricks는 데이터를 작성할 때 Parquet 또는 ORC 대신 Delta Lake를 사용하는 것을 권장합니다. Azure Databricks는 Delta Lake 기반의 테이블과 상호 작용할 때 효율성을 위해 많은 기능을 최적화했고, 몇 단계를 통해 데이터 및 코드 양식 Parquet에서 Delta Lake로 업그레이드할 수 있습니다. Parquet 데이터 레이크를 Delta Lake로 마이그레이션을 참조하세요.

Delta Lake는 ACID 트랜잭션 보장을 제공하므로 워크로드를 간소화하여 Apache Spark 작업에서 의사 트랜잭션을 만들기 위한 해결 방법을 제거할 수 있습니다. 예를 들면 다음과 같습니다.

  • 지정된 작업의 모든 파일을 파티션의 일부로 동시에 검색할 수 있는 디렉터리 구조 또는 분할 전략을 빌드합니다.
  • 메타스토어를 구성하거나 사용하여 새 데이터를 검색하는 방법에 대한 트랜잭션을 추가합니다.
  • MSCK repair를 사용하여 테이블에 기록된 파일을 메타스토어에 등록합니다.
  • alter table add partition을 사용하여 수동으로 파티션을 테이블에 추가합니다.

Azure Databricks에서 테이블을 분할하는 경우를 참조하세요.

참고 항목

사용된 데이터 형식을 업그레이드하지 않고 워크로드를 실행할 수 있지만 Azure Databricks에서의 가장 큰 성능 향상의 대부분은 Delta Lake와 직접 관련이 있습니다.

Databricks Runtime 호환 라이브러리를 사용하여 Apache Spark 코드 다시 컴파일

Databricks Runtime의 각 버전은 Apache Spark 애플리케이션에 필요한 많은 라이브러리로 미리 구성됩니다. 필요에 따라 컴퓨팅에 추가 라이브러리를 설치할 수 있지만 가능하면 Databricks는 호환성을 테스트하는 Databricks 런타임에 패키지된 라이브러리 버전을 사용하는 것이 좋습니다. 각 Databricks Runtime 릴리스에는 설치된 모든 라이브러리 목록이 포함됩니다. Databricks 런타임 릴리스 정보 버전 및 호환성을 참조 하세요.

SparkSession 만들기 명령 제거

많은 레거시 Apache Spark 워크로드가 각 작업에 대해 새 SparkSession을 명시적으로 선언합니다. Azure Databricks는 각 컴퓨팅 클러스터에 대해 SparkContext를 자동으로 만들고, 클러스터에 대해 실행되는 각 Notebook 또는 작업에 대해 격리된 SparkSession을 만듭니다. 코드를 로컬로 컴파일 및 테스트한 다음 SparkSession.builder().getOrCreate()를 사용하도록 이러한 명령을 업그레이드하여 Azure Databricks에 배포하는 기능을 유지할 수 있습니다.

터미널 스크립트 명령 제거

Apache Spark를 사용하려면 프로그램이 sys.exit() 또는 sc.stop()과 같은 명령을 사용하여 완료된 것을 명시적으로 선언해야 합니다. Azure Databricks는 작업이 완료될 때 작업을 자동으로 종료 및 정리하므로 이러한 명령은 필요하지 않으며 제거해야 합니다.

또한 Azure Databricks는 실행 종료 시 구조적 스트리밍 워크로드를 자동으로 종료 및 정리하므로 구조적 스트리밍 애플리케이션에서 awaitTermination() 및 유사한 명령을 제거할 수 있습니다.

Azure Databricks를 신뢰하여 클러스터 구성

Azure Databricks는 복원력 및 리소스 사용량을 최대화하기 위해 컴퓨팅 클러스터의 드라이버 및 실행기에 대한 모든 설정을 자동으로 구성합니다. 실행기 또는 JVM에 대한 사용자 지정 구성을 제공하면 성능이 저하될 수 있습니다. Databricks는 논리가 일관되게 유지되도록 형식 처리 또는 함수를 제어하는 데 필요한 Spark 구성만 설정하는 것을 권장합니다.

워크로드 실행

이제 Azure Databricks 실행을 방해할 수 있는 패턴, 명령 및 설정을 제거했으므로 테스트 환경에서 워크로드를 실행하고 성능 및 결과를 레거시 인프라와 비교할 수 있습니다. 팀이 Apache Spark 워크로드의 문제를 해결하고 성능을 개선하기 위해 개발한 많은 기술을 Azure Databricks에서 계속 활용할 수 있지만 Apache Spark, Delta Lake 또는 사용자 지정 Azure Databricks 제품에서 새 기능을 사용하도록 단계를 업그레이드하면 더 큰 이점을 얻을 수 있습니다.