[Apache Spark] 분산형 공유 변수

연수·2021년 11월 30일
0

spark

목록 보기
14/26

☁️ 브로드캐스트 변수

  • 변하지 않는 값을 클로저(closure) 함수의 변수로 캡슐화하지 않고 클러스터에서 효율적으로 공유하는 방법을 제공한다.
  • 태스크에서 드라이버 노드의 변수를 사용할 때는 클로저 함수 내부에서 단순하게 참조할 수 있지만, 클로저 함수에서 변수를 사용할 때 워커 노드에서 여러 번(태스크 당) 역직렬화가 일어나기 때문에 비효율적이다.
  • 반면 브로드캐스트 변수는 모든 태스크마다 직렬화하지 않고 클러스터의 모든 머신에 캐시하는 불변성 공유 변수이다.
  • 따라서 브로드캐스트 변수를 사용하는 방식은 클로저에 담아 전달하는 방식보다 훨씬 효율적이다.

 

🍂 어큐뮬레이터

  • 스파크의 두 번째 공유 변수 타입
  • 트랜스포메이션 내부의 다양한 값을 갱신하는 데 사용한다.
  • 내고장성을 보장하면서 효율적인 방식으로 드라이브에 값을 전달할 수 있다.
  • 어큐뮬레이터는 스파크 클러스터에서 로우 단위로 안전하게 값을 갱신할 수 있는 변경 가능한 변수를 제공한다.
  • 또한, 디버깅용이나 저수준 집계 생성용으로 사용할 수 있다.
  • 결합성과 가환성을 가진 연산을 통해서만 더할 수 있는 변수이므로 병렬 처리 과정에서 효율적으로 사용할 수 있으며, 카운터(맵리듀스의 카운터와 같은)나 합계를 구하는 용도로 사용할 수 있다.
  • 스파크는 기본적으로 수치형 어큐뮬레이터를 지원하며 사용자 정의 어큐뮬레이터를 만들어 사용할 수도 있다.
  • 어큐뮬레이터의 값은 액션을 처리하는 과정에서만 갱신된다. 스파크는 각 태스크에서 어큐뮬레이터를 한 번만 갱신하도록 제어한다.
  • 어큐뮬레이터는 스파크의 지연 연산 모델에 영향을 주지 않는다. 따라서 지연 처리 형태의 트랜스포메이션에서 어큐뮬레이터의 갱신 작업을 수행하는 경우 실제 실행 전까지 어큐뮬레이터가 갱신되지 않는다.
  • 어큐뮬레이터의 이름은 선택적으로 지정되며, 이름이 지정되지 않은 어큐뮬레이터는 스파크 UI에 표시되지 않는다.

 


[출처] 스파크 완벽 가이드 (빌 체임버스, 마테이 자하리아 지음)

profile
DCDI

0개의 댓글