안녕하세요 오늘은 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 속도를 높일 수 있음

2. 사례
- broadcast 미사용 시
- join 시 15초의 시간 소요

- 실행 계획

3. Broadcast 사용
- join시 0.7초 소요

- 실행 계획

4. 자동 감지
- Spark의 경우 옵티마이저를 통해 자동으로 broadcast를 감지할 수 있습니다/


- 자동 broadcast 조건
- spark.sql.autoBroadcastJoinThreshold 옵션에 정해진 용량 이하(Default: 10MB)
- 데이터를 처음부터 구성합니다. e.g. spark.range
- 스키마 및 크기 정보가 있는 파일에서 읽는 경우 e.g. parquet (csv나 json의 경우 스키마 또는 통계정보가 없기 때문에 대상 아님)
여기까지 ‘’Spark 4편 – Broadcast’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다.
Written by 한 제호 / Data실
BESPIN GLOBAL