Apache Spark는 대용량 데이터를 처리하는 뛰어난 성능을 제공하는 분산 컴퓨팅 엔진으로, 데이터 처리 과정을 효율적으로 관리하기 위해 핵심 메커니즘을 사용합니다.
Spark Session (Spark Application)
Spark Session은 Spark 애플리케이션을 초기화하고 데이터를 처리하는 데 필요한 모든 기능을 통합하는 진입점 (entry point) 입니다. Spark Session은 Spark 2.0 버전 이후부터 도입되었으며, Spark Context와 SQL Context를 통합하여 사용자가 데이터를 읽고 쓰며 SQL 쿼리를 실행하는 등 다양한 작업을 수행할 수 있는 통합 환경을 제공합니다.
Spark의 코어 기능들과 상호 작용할 수 있는 진입점을 제공하여, API로 프로그래밍을 할 수 있게 해주는 객체입니다.
Job
Spark Job은 Spark 애플리케이션에서 한 번의 액션을 수행할 때 생성되는 작업의 단위입니다. 액션은 Spark에서 데이터를 읽거나 쓰는 등의 작업을 수행하는 사용자의 명령을 의미합니다. 예를 들어, 데이터프레임에 대한 count() 나 saveAsTextFile() 과 같은 액션을 호출하면, Spark는 이러한 액션을 수행하기 위한 Job을 생성합니다.
Job은 액션을 호출할 때마다 생성됩니다. 액션은 Spark에게 데이터 처리 작업을 수행하도록 지시하며, 이때 Spark는 해당 액션을 포함하는 Job을 생성합니다. Job은 여러 개의 Stage로 나누어질 수 있습니다.
Stage
Stage는 Spark Job을 더 작은 단위로 나눈 것으로, 주로 셔플 (shuffle) 연산을 기준으로 생성됩니다. 셔플은 데이터를 재분배하거나 섞는 연산을 의미하며, 이 때마다 새로운 Stage가 생성됩니다. 각 Stage는 동일한 셔플 데이터에 접근하는 Task들을 포함하고 있습니다.
Stage는 하나 이상의 Task로 나누어지며, 각 Task는 클러스터의 여러 노드에서 병렬로 실행됩니다. 이로써 데이터 처리가 효율적으로 분산되고 병렬화됩니다.
Job 내에서 Stage는 주로 셔플 연산을 기준으로 생성됩니다. 예를 들어, 데이터 그룹화, 정렬 또는 조인과 같은 연산에서는 데이터를 재분배하거나 섞는 셔플이 필요하며, 이때마다 새로운 Stage가 시작됩니다.
Task
Task는 Spark 애플리케이션에서 Stage를 더 작은 단위로 나눈 것으로, 각각의 Task는 클러스터의 여러 노드에서 병렬로 실행됩니다. Task는 데이터를 처리하고 결과를 생성하는 단위로, Stage 내에서 여러 Task들이 동시에 실행될 수 있습니다.
Task는 데이터를 분할된 파티션에 대해 병렬로 처리합니다. 각 Task는 자신이 처리할 데이터 파티션을 할당받아 연산을 수행하고, 그 결과를 생성합니다.
Task는 Stage를 구성하는 하위 단위로 생성됩니다. Stage는 논리적인 단계로 데이터 처리 과정을 구성하며, 각 Stage는 하나 이상의 Task로 나누어집니다. Task의 개수는 데이터 파티션의 수에 따라 동적으로 조정되며, 각 Task는 클러스터의 여러 노드에서 병렬로 실행됩니다.
Partition
파티션은 Spark에서 데이터를 나누는 논리적인 단위로, 대용량 데이터셋을 여러 부분으로 분할하여 클러스터의 여러 노드에서 병렬로 처리할 수 있게 합니다. 각 파티션은 데이터의 작은 부분을 담당하며, 각 노드는 자신이 담당하는 파티션에 대한 작업을 수행합니다.
파티션은 Spark에서 내부적으로 자동으로 생성되며, 사용자는 파티션의 개수를 명시적으로 지정할 수도 있습니다. 데이터의 크기, 클러스터의 자원, 사용자의 명시적인 설정 등에 따라 파티션의 개수는 동적으로 조절될 수 있습니다.
각 파티션은 셔플 연산의 단위로 동작하며, 이는 데이터를 효과적으로 재분배하고 성능을 최적화하는 데 도움이 됩니다.
'데이터 > Apache Spark' 카테고리의 다른 글
[Apache Spark] RDD란 무엇인가? (0) | 2023.11.26 |
---|---|
[Apache Spark] 로컬 환경에 설치 및 간단 예제 (2) | 2023.11.26 |
[Apache Spark] Transformation과 Action (1) | 2023.11.25 |
[Apache Spark] Apache Spark의 아키텍처 (0) | 2023.11.23 |
[Apache Spark] Apache Spark란 무엇인가? (2) | 2023.11.22 |