Spark에서 파티셔닝 이해하기



이 블로그에서는 Spark의 파티셔닝, 파티션 유형 및 키 기반 변환의 실행 속도를 향상시키는 방법에 대해 알아야 할 모든 것을 설명합니다.

Prithviraj Bose 제공

스파크 탄력적 인 분산 데이터 세트 (프로그래밍 추상화)는 느리게 평가되고 변환은 방향성 비순환 그래프 (DAG)로 저장됩니다. 따라서 RDD의 모든 작업은 Spark가 DAG를 다시 계산하도록합니다. 작업자 노드가 실패하면 DAG를 다시 계산하면되기 때문에 Spark에서 복원력을 얻는 방법입니다.





그것은 또한 캐시에 필수 (적절한 스토리지 수준으로 유지) RDD에 대한 빈번한 작업으로 인해 Spark가 DAG를 재 계산하지 않도록합니다.이 블로그에서 다루는 주제는 Apache Spark 및 Scala 인증에 필수적으로 필요합니다. 이 블로그에서 다루는 주제는 본질적으로 .

파티션 도구를 사용하는 이유

클러스터 컴퓨팅에서 핵심 과제는 네트워크 트래픽을 최소화하는 것입니다. 데이터가 키-값 지향적이면 RDD에서 후속 변환을 수행 할 때 네트워크 전체에서 상당한 양의 데이터 셔플 링이 발생하므로 분할이 필수적입니다. 유사한 키 또는 키 범위가 동일한 파티션에 저장되면 셔플 링이 최소화되고 처리 속도가 상당히 빨라집니다.



작업자 노드간에 데이터 셔플 링이 필요한 변환은 파티셔닝의 이점을 크게 얻습니다. 이러한 변형은 cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey조회 .

배열 C ++ 내림차순 정렬
RDD가 키-값 기반 인 경우 파티션을 구성 할 수 있습니다.

파티션의 속성

  1. 동일한 파티션의 튜플은 동일한 시스템에 있음이 보장됩니다.
  2. 클러스터의 각 노드는 둘 이상의 파티션을 포함 할 수 있습니다.
  3. 총 파티션 수를 구성 할 수 있으며 기본적으로 모든 실행기 노드의 총 코어 수로 설정됩니다.

Spark의 파티셔닝 유형

Spark는 두 가지 유형의 파티셔닝을 지원합니다.

  • 해시 분할 : Java의 Object.hashCode 파티션을 결정하는 방법 파티션 = key.hashCode () % numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • 범위 분할 : 범위를 사용하여 범위에 속하는 키를 각 파티션에 배포합니다. 이 방법은 키에 자연스러운 순서가 있고 키가 음수가 아닌 경우에 적합합니다. 아래 코드 스 니펫은 범위 파티 셔 너의 사용법을 보여줍니다.

코드 예

작업자 노드간에 데이터를 분할하는 방법에 대한 예를 살펴 보겠습니다. 전체 Scala 코드를 사용할 수 있습니다. 여기 .

다음은 12 개 좌표 (튜플)의 테스트 데이터입니다.

만들기 org.apache.spark.HashPartitioner 키의 해시 코드를 기반으로이 두 파티션에 걸쳐 키가 분할됩니다.

그런 다음 쌍을 검사하고 다음과 같은 다양한 키 기반 변환을 수행 할 수 있습니다. foldByKeyreduceByKey.

요약하고 분할하면 키 기반 변환의 실행 속도가 크게 향상됩니다.

질문이 있으십니까? 의견란에 언급 해 주시면 연락 드리겠습니다.

자바 개발을위한 최고의 IDE

관련 게시물:

Hadoop을 마스터 한 후 Spark를 배워야하는 이유

Apache Spark 대 Hadoop MapReduce