Spark 알아보기

완료됨

Azure Databricks에서 Apache Spark를 사용하여 데이터를 처리하고 분석하는 방법을 더 잘 이해하려면 기본 아키텍처를 이해하는 것이 중요합니다.

대략적인 개요

대략적으로 Azure Databricks 서비스는 Azure 구독에서 Apache Spark 클러스터를 시작하고 관리합니다. Apache Spark 클러스터는 단일 컴퓨터로 처리되는 컴퓨터 그룹이며 Notebook에서 실행된 명령의 실행을 처리합니다. 클러스터를 사용하면 스케일링과 성능을 향상하기 위해 데이터가 여러 컴퓨터에서 병렬화되도록 처리할 수 있습니다. Spark 드라이버 및 작업자 노드로 구성됩니다. 드라이버 노드는 작업을 작업자 노드로 보내고 지정된 데이터 원본에서 데이터를 가져오도록 지시합니다.

Databricks에서 Notebook 인터페이스는 일반적으로 드라이버 프로그램입니다. 이 드라이버 프로그램은 프로그램에 대한 기본 루프를 포함하고 클러스터에 배포 데이터 세트를 생성된 다음, 해당 데이터 세트에 작업을 적용합니다. 드라이버 프로그램은 배포 위치에 상관없이 SparkSession 개체를 통해 Apache Spark에 액세스합니다.

Diagram of an example Apache Spark cluster, consisting of a Driver node and four worker nodes.

Microsoft Azure에서 클러스터를 관리하고 클러스터를 구성할 때 사용되는 설정 및 사용량에 따라 필요한 대로 자동 스케일링합니다. 자동 종료를 사용하도록 설정하면 지정된 비활성 시간(분) 후에 Azure에서 클러스터를 종료할 수 있습니다.

Spark 작업 세부 정보

클러스터에 제출된 작업은 필요에 따라 많은 개별 업무로 분할됩니다. 이것이 클러스터의 노드 간에 작업을 배포하는 방법입니다. 업무는 작업으로 세분화됩니다. 업무에 대한 입력은 하나 이상의 파티션으로 분할됩니다. 이 파티션은 각 슬롯의 작업 단위입니다. 작업 간에 파티션을 다시 구성하고 네트워크를 통해 공유해야 할 수도 있습니다.

Spark의 높은 성능에 대한 비결은 병렬 처리입니다. 수직적인 스케일링(단일 컴퓨터에 리소스를 추가함)은 RAM, 스레드 및 CPU 속도의 한정된 양에 의해 제한되지만 클러스터는 수평적으로 스케일링하여 필요에 따라 클러스터에 새 노드를 추가합니다.

Spark는 다음 두 수준에서 작업을 병렬 처리합니다.

  • 병렬 처리의 첫 번째 수준은 작업자 노드에서 실행되는 JVM(Java 가상 머신)인 실행기로, 일반적으로 노드당 인스턴스는 하나입니다.
  • 두 번째 병렬 처리 수준은 각 노드의 CPU와 코어 수로 해당 수가 결정되는 슬롯입니다.
  • 각 실행기에는 병렬 처리된 태스크를 할당할 수 있는 여러 슬롯이 있습니다.

Diagram of Spark cluster with tasks.

JVM은 태생적으로 다중 스레드이지만 드라이버에서 작업을 조정하는 JVM과 같은 단일 JVM에는 한정된 상한이 있습니다. 작업을 태스크로 분할하여 드라이버는 병렬 실행을 위해 작업자 노드의 실행기에서 *슬롯에 작업 단위를 할당할 수 있습니다. 또한 드라이버는 병렬 처리를 위해 배포할 수 있도록 데이터를 분할하는 방법도 결정합니다. 따라서 드라이버는 각 태스크가 처리할 데이터 조각을 알 수 있도록 각 작업에 데이터 파티션을 할당합니다. 시작되면 각 태스크는 할당된 데이터의 파티션을 페치합니다.

작업 및 스테이지

수행 중인 작업에 따라 병렬 처리된 여러 작업이 필요할 수 있습니다. 각 작업은 스테이지로 세분화됩니다. 집을 짓는 작업을 상상해보면 쉽게 알 수 있습니다.

  • 첫 번째 스테이지에서는 기초를 다집니다.
  • 두 번째 스테이지에서는 벽을 세웁니다.
  • 세 번째 스테이지에서는 지붕을 추가합니다.

이러한 단계를 순서에 맞지 않게 수행하려는 시도는 의미가 없으며 실제로 불가능할 수 있습니다. 마찬가지로 Spark는 모든 작업이 올바른 순서로 수행되도록 각 작업을 스테이지로 세분화합니다.