본 내용은 러닝스파크 책 참고


Accumulator

- Sparkmap()이나 조건 지정을 위해 filter()에 함수를 넘길 때, 보통 Driver Program에 정의된 변수를 사용

(Driver ProgramWorker Node) - 해당 내용은 kkn1220.tistory.com/131에서 참고


- 하지만, 클러스터에서 실행 중인 각각의 작업들은 변수의 복사본을 받아 작업하게 되므로, 업데이트된 내용이 다시 드라이버 프로그램으로 리턴 해주지는 않는다이에 Accumulator 변수는 이러한 제한을 풀어준다.


- Accumulator: Worker Node에서 Driver Program으로 보내는 값의 집합 연산에  대해 문법 제공. 가장 흔한 사용 방법 중 하나는, 작업 수행 중에 발생하는 일에 대한 개수를 디버깅 목적으로 헤아림

-> Worker node에 복사본을 전달하고, 어플리케이션 종료 시점에 각 worker node로부터 수집하여 결과를 생성


- 라인수 세기 예제

- 해당 예제에서 Transformation 계산이 끝난 후, 카운터의 값을 출력

- 올바른 값은 반드시 saveAsTextFile이 실행된 다음에 얻을 수 있음. 그 위의 map()lazy execution 방식을 따르기 때문에 수반되는 accumulator 값 증가는 반드시 map()이 실제로 실행 되는 시점인 saveAs~ 액션이 수행되어야만 강제하기 때문



요약하면, Accumulator는 다음과 같이 동작함

1) Driver Program에서 SparkContext.accumulator(IV) 메소드를 호출하여 초기 값을 가진 Accumulator 를 만든다.

2) 반환 타입은 Accumulator[T] 객체이며, T는 초기 값의 타입이다.

3) Spark Closure의 작업 노드 코드에서 Accumulator+= 메소드를 써서 값을 더한다.

4) Driver Program에서 value 속성을 불러 Accumulator 값에 접근한다.


여기에서 Worker nodetask에서는 AccumulatorValue()에 접근하지 못하는 것을 유념! 즉 이 task의 관점에

Accumulator쓰기 전용변수인 셈. 이는 Accumulator가 매 업데이트마다 통신할 필요가 없도록 효율적으로 구되어 있기 때문

반응형

'기타 > 분산 컴퓨팅' 카테고리의 다른 글

Spark Cluster 운영  (0) 2017.04.07
Spark Data 불러오기/저장하기  (0) 2017.04.07
SparkContext, Reduce/Group By Key  (0) 2017.04.07
Spark Pair RDD 개념  (0) 2017.04.07
Spark RDD 개념 및 예제  (0) 2017.04.07

+ Recent posts