[Spark] 누적변수와 공유변수(accumulator, broadcast variable)

Woong·2021년 12월 20일
1

Apache Spark

목록 보기
8/22

누적 변수(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 메소드
    • 삭제 후 접근 시도시 exception
  • unpersist 메소드
    • 삭제 후 접근 시도시 executor로 재전송

관련 매개변수

  • spark.broadcast.compress
    • 공유 변수 전송시 데이터 압축 여부 (true 권장)
    • (spark.io.compression.codec 으로 지정된 코덱으로 압축)
  • spark.broadcast.blockSize
    • 공유변수 전송시 데이터 청크 크기. (기본값 4096KB 권장)
  • spark.python.worker.reuse
    • 파이썬 공유변수 재전송 관련 옵션. (true 권장)

0개의 댓글