누적 변수(accumulator)
개요
- 값을 더하는 연산만 허용하는 변수
- 여러 executor가 공유
- spark job 의 전역 합계나, counter 구현에 사용
- ※ 값 참조는 driver에서만 함.
- executor가 접근시 exception 발생
- foreach 등에서 add하는 것은 가능하나 참조는 불가
생성
SparkContext.accumulator(initialValue)
sc.accumulator(initialValue, "accumulatorName")
- {변수명}.add(..) 나 += 으로 더하기 가능.
- 객체 타입과 zero, addInPlace, addAccumulator 메소드 정의시 객체 타입으로도 사용 가능(상세 생략)
공유 변수(broadcast variable)
- executor 가 수정할 수 없는 변수.
- driver에서만 생성 가능, executor는 읽기만 가능
생성
SparkContext.broadcast(value)
참조 (executor에서)
Broadcast.value
로 참조
- ※ 참조시에는 항상 value 메소드를 사용해야함
- 직접 접근시 변수를 직렬화해 task와 함계 전송 -> 성능상 이득을 상실
삭제
- destroy 메소드
- unpersist 메소드
- 삭제 후 접근 시도시 executor로 재전송
관련 매개변수
- spark.broadcast.compress
- 공유 변수 전송시 데이터 압축 여부 (true 권장)
- (spark.io.compression.codec 으로 지정된 코덱으로 압축)
- spark.broadcast.blockSize
- 공유변수 전송시 데이터 청크 크기. (기본값 4096KB 권장)
- spark.python.worker.reuse
- 파이썬 공유변수 재전송 관련 옵션. (true 권장)