Spark 4편 – Broadcast

안녕하세요 오늘은 BESPIN GLOBAL Data실 한제호님이 작성해주신 ‘Spark 4편 – Broadcast’에 대해 소개해드리도록 하겠습니다.

목차
1. Braoadcast 기능
2. 사례
3. Broadcast 사용
4. 자동 감지

1. Broadcast 기능

  • Spark에서 성능 최적화를 하는 가장 좋은 방법은 노드간의 데이터 이동(셔플)을 최소화 하는 것입니다. Broadcast는 지정된 데이터셋 또는 변수를 모든 노드에 복사하여 셔플을 최소화 하는 방안중에 하나입니다.
  • Broadcast Variables
    • 셔플 최소화를 위해 데이터를 직렬화하여 모든 작업자 노드의 메모리에 로딩
    • 읽기 전용 데이터이며 broadcast variable 생성 이후에는 데이터 변경이 불가함
    • 메모리에 올라가기 때문에 cache() 기능과 같이 많이 사용되지 않는 경우에는 적용을 피해야함
  • Broadcast Join
    • broadcast variable를 한번만 사용해도 유용할 수 있는 기능
    • 데이터 크기가 작은 dataframe에 대해 해당 기능을 통해 join 속도를 높일 수 있음
데이터 크기가 작은 dataframe에 대해 해당 기능을 통해 join 속도를 높일 수 있음

2. 사례

  • broadcast 미사용 시
    • join 시 15초의 시간 소요
join 시 15초의 시간 소요
  • 실행 계획
실행 계획

3. Broadcast 사용

  • join시 0.7초 소요
join시 0.7초 소요
  • 실행 계획
실행 계획

4. 자동 감지

  • Spark의 경우 옵티마이저를 통해 자동으로 broadcast를 감지할 수 있습니다/
Spark의 경우 옵티마이저를 통해 자동으로 broadcast를 감지할 수 있습니다/
자동 broadcast 조건
  • 자동 broadcast 조건
    • spark.sql.autoBroadcastJoinThreshold 옵션에 정해진 용량 이하(Default: 10MB)
    • 데이터를 처음부터 구성합니다. e.g. spark.range
    • 스키마 및 크기 정보가 있는 파일에서 읽는 경우 e.g. parquet (csv나 json의 경우 스키마 또는 통계정보가 없기 때문에 대상 아님)

여기까지 ‘’Spark 4편 – Broadcast’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다. 

Written by 한 제호 / Data실

BESPIN GLOBAL