드라이버가 뭐야?

이 기사는 번역되었습니다. 원본 텍스트에 액세스하려면 과학적인 인터넷 연결이 필요합니다.

Apache Spark 및 PySpark의 Spark 드라이버란 무엇입니까? 다중 머신 클러스터 모드에서 PySpark는 마스터(드라이버) - 슬레이브(워커) 아키텍처를 사용하여 작업하며, 이들 머신은 네트워크를 통해 서로 협력하여 작업 실행을 완료합니다. 이러한 스파크 시스템을 위해서는 스파크 드라이버와 같은 별도의 머신 관리 클러스터가 필요합니다.


이 문서에서는 Spark 아키텍처, 드라이버 관리 콘텐츠 및 구성에 대해 설명합니다.

1. 아파치 스파크 아키텍처

이미지-20230103174017106

Apache Spark는 대량의 정형, 비정형, 반정형 데이터를 처리하기 위한 오픈 소스 프레임워크입니다. 이는 마스터 드라이버, ClusterManager 및 여러 작업 노드로 구성된 마스터-다중 슬레이브 아키텍처를 채택합니다. 마스터가 위치한 물리적 머신을 마스터라고 하고, 나머지는 슬레이브입니다.

1.1 스파크 클러스터 관리자

Spark 클러스터 관리자는 작업자가 데이터 처리를 수행하는 데 필요한 리소스를 할당하는 역할을 담당합니다. 유사한 클러스터 관리자에는 Hadoop Yarn, Apache Mesos 및 독립형 스케줄러(독립형 모드의 Spark 클러스터 관리자)가 포함됩니다.

1.2 스파크 드라이버 프로그램

애플리케이션에서 Spark 드라이버의 작업 중 하나는 SparkContext 개체를 생성하는 것입니다. Spark 작업을 제출하면 드라이버 프로그램은 main() 메서드를 실행하고 내부 데이터 흐름을 나타내는 DAG를 생성합니다. DAG 워크플로에 따라 드라이버는 클러스터 관리자의 리소스에 적용됩니다. 리소스 할당이 성공한 후 드라이버는 the serialized result (code+data)작업으로 실행하기 위해 직렬화된 결과(원본 텍스트: )를 SparkContext를 통해 작업자에게 보내고 실행 결과를 캡처합니다.

핵심:

  • Spark Context : 드라이버 프로그램을 통해 클러스터 관리자에 연결하여 데이터 처리에 필요한 실행자를 신청한 후, 작업 실행을 위해 직렬화된 결과를 작업자에게 반환합니다.
  • RDD : 탄력적인 분산 데이터 세트는 작업자 노드의 메모리나 디스크에 저장할 수 있는 데이터 모음입니다.
  • 방향성 비순환 그래프(DAG) : DAG는 데이터의 계산 순서 그래프를 나타냅니다. Apache Spark는 DAG(직접 비순환 그래프)로 표시되는 데이터 흐름을 사용하여 RDD 형식으로 데이터를 처리합니다.

1.3 스파크 실행자

Spark Exector 또는 작업자는 클러스터 실제 머신에 분산 및 배포됩니다. 각 실행기에는 코어라고 하는 데이터를 처리할 수 있는 대역폭이 있습니다. 여기서는 CPU 코어에 대해 이야기합니다. 실행기가 얻은 코어 수에 따라 드라이버에서 작업을 가져와 데이터에 대한 사용자 작성 애플리케이션의 논리를 처리하는 동시에(코드는 작성된 순서대로 데이터 세트에서 실행됨) 데이터를 저장합니다. 메모리나 디스크에. exector는 내부 및 외부 스토리지 시스템에서 데이터를 읽을 수 있습니다.


2. 스파크 드라이버는 무엇을 합니까?

이미지-20230103182951099

Spark 작업이 제출되면 드라이버가 구성에 따라 시작됩니다. 애플리케이션의 메인 메소드 실행과 SparkContext 생성을 동시에 수행하고, 이를 기반으로 작성된 프로그램 코드에 따라 SparkContext, 변환 연산자, 액션 연산자를 생성합니다.

실행 연산자가 호출될 때까지 모든 변환 연산자는 SparkContext에 배치되고 DAG 형태로 존재합니다. 방향성 비순환 그래프(DAG)는 종속성(계보라고도 함)을 생성합니다. 실행 연산자가 호출되면 여러 작업을 포함하는 작업이 생성됩니다. 그런 다음 드라이버는 이러한 작업을 실행하기 위해 실행기에 리소스를 할당하기 위해 클러스터 관리자에 적용됩니다.

리소스 할당이 성공한 후 taskScheduler의 도움으로 클러스터 관리자는 애플리케이션 구성에 따라 작업자 노드에서 작업을 시작합니다.

작업은 Executor에게 분배되지만 드라이버는 모든 작업의 ​​메타데이터를 소유하고 작업의 상태 정보를 저장하며, 작업 실행이 완료되면 Executor는 결과를 드라이버로 다시 전송합니다.

핵심:

  • 드라이버는 애플리케이션의 기본 메서드를 실행합니다.
  • 드라이버는 SparkContext 및 SparkSession을 생성합니다.
  • 애플리케이션의 코드를 방향성 비순환 그래프로 변환합니다.
  • DAG 실행 계획, 논리적 계획 및 물리적 계획을 작성하는 데 도움이 됩니다.
  • 드라이버의 taskScheduler는 클러스터 관리자의 도움을 받아 실행기에 대한 작업을 예약합니다.
  • 드라이버는 실행기와 조정하고 실행기에 저장된 데이터를 추적합니다.

3. 스파크 드라이버 구성

다음은 몇 가지 주요 드라이버 구성입니다.

  • spark.driver.cores: CPU의 컴퓨팅 성능을 나타내며 기본값은 1입니다.
  • spark.driver.maxResultSize: 이 속성은 드라이버가 저장할 수 있는 직렬화된 결과의 상한을 정의합니다. 기본값은 1G, 최소값은 1M이며, -1로 설정하면 온라인 상태는 아니지만 드라이버 OOM이 발생할 수 있다는 의미입니다. "직렬화된 결과"란 무엇입니까? 원본 텍스트는 직렬화된 결과이며 내가 이해한 바는 두 부분으로 나누어져 있습니다: (1) 드라이버가 생성한 방향성 비순환 그래프와 작업입니다. 이러한 개체는 모두 여유 저장 공간을 차지합니다. (2) 작업이 실행된 후, 결과는 운전자에게 반환되었습니다.
  • spark.driver.memory: 스파크 드라이버가 사용하는 메모리의 상한을 나타냅니다. 제출된 작업이 상한을 초과하면 예외가 발생합니다. 기본값은 1G입니다.

4. Spark.sql.shuffle.partitions와 Spark.default.parallelism의 차이점

Spark.default.parallelism은 RDD를 처리할 때만 작동하며 Spark SQL에는 영향을 미치지 않습니다.

Spark.sql.shuffle.partitions는 Spark SQL 관련 설정입니다.

Supongo que te gusta

Origin blog.csdn.net/yy_diego/article/details/128544618
Recomendado
Clasificación