Azure Databricks 위해 기존 Apache Spark 코드 조정

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

중요합니다

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 Runtime 릴리스 정보 버전 및 호환성을 참조하세요.

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() 및 유사한 명령을 제거할 수 있습니다. 사용 awaitTermination()시기를 참조하세요.

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

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

워크로드 실행

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