Chapter 14 분산형 공유 변수

저수준 API 유형에는 RDD 인터페이스 외에도 분산형 공유변수가 존재한다. 분산형 공유 변수에는 브로드캐스트 변수와 어큐뮬레이터라는 두 개의 타입이 존재한다. 브로드캐스트 변수 사용시에는 모든 워커 노드에 큰 값을 저장하므로 재전송 없이 스파크 액션을 재사용 할 수 있고, 어큐뮬레이터 사용시 모든 태스크의 데이터를 공유 결과에 추가할 수 있다.

브로드캐스트 변수

브로드캐스트 변수는 불변성 값을 클로저 함수의 변수로 캡슐화하지 않고 클러스터에서 효율적으로 공유하는 방법을 제공한다. 일반적으로 태스크에서 드라이버 노드의 변수 사용시 클로저 함수 내부에서 단순하게 참조하는 방법을 사용하는데 이는 비효율적이다. 그 이유는 클로저 함수에서 변수 사용시 워커 노드에서 여러 번 역직렬화가 일어나기 때문이다. 따라서 이런 상황에서는 브로드캐스트 변수를 활용해, 모든 태스크마다 역직렬화하지 않고 클러스터 모든 머신에 캐시해야 한다.

어큐뮬레이터

어큐뮬레이터는 트랜스포메이션 내부의 다양한 값을 갱신하는데 사용하고, 내고장성을 보장하면서 효율적인 방식으로 드라이버에 값을 전달할 수 있다. 로우 단위로 안전하게 값을 갱신할 수 있는 변경가능한 변수도 제공한다. 디버깅용이나 저수준 집계 생성용으로 사용할 수도 있어 유용하다.

어큐뮬레이터의 값은 액션을 처리하는 과정에만 갱신되며, 스파크는 각 태스트에서 어큐뮬레이터를 한 번만 갱신하도록 제어한다. 따라서 재시작한 태스크에서는 어큐뮬레이터값을 갱신할 수 없다. 어큐뮬레이터는 특정 RDD나 부모 RDD에 액션을 실행하는 시점에 딱 한번만 갱신하기 때문에 지연 연산 모델에 영향을 주지 않는다.

사용자 정의 어큐뮬레이터

스파크에서 제공하는 기본 어큐뮬레이터이외에 사용자 정의 어큐뮬레이터를 정의할 수도 있다. 이 때 AccumulatorV2 클래스를 상속받아 구현하면 되는데, AccumulatorV2 클래스에 포함된 추상 메서드도 구현해야 한다.

Reference

스파크 완벽 가이드
아파치 스파크

profile
개발자 지망생입니다.

0개의 댓글