Tools/Spark

Spark 브로드캐스트 변수(Broadcast Variables)와 어큐뮬레이터(Accumulators)

칼쵸쵸 2024. 3. 21. 11:13

브로드캐스트 변수(Broadcast Variables)

 

 

브로드캐스트 변수는 클러스터의 모든 노드에 큰 읽기 전용 값을 효율적으로 분산하기 위한 Spark의 메커니즘입니다. 이 변수들은 모든 작업 노드에서 접근할 수 있도록 메모리에 캐시되므로, 데이터를 각 노드에 복사하지 않고도 공유할 수 있습니다. 브로드캐스트 변수는 일반적으로 전체 작업에서 공통적으로 사용되는 대규모 데이터 세트(예: 참조 데이터, lookup 테이블)에 사용됩니다.

val spark: SparkSession = ...
val largeLookupTable = spark.sparkContext.broadcast(loadLargeLookupTable())

spark.sparkContext.parallelize(data).map { item =>
  val lookupTable = largeLookupTable.value
  // lookupTable을 사용한 연산 수행
}

 

 

어큐뮬레이터(Accumulators)

어큐뮬레이터는 분산 데이터 처리 작업 중에 변동 가능한 변수를 안전하게 업데이트하는 메커니즘입니다. 이들은 주로 카운트와 같은 집계 연산에 사용됩니다. Spark는 태스크 간에 안전한 업데이트를 보장하기 위해 어큐뮬레이터 업데이트를 통제합니다. 이는 작업 노드들이 결과를 드라이버 프로그램에만 보고하도록 함으로써 구현됩니다. 따라서 어큐뮬레이터는 디버깅이나 모니터링 목적으로 유용합니다.

 

일반 변수사용시 각각의 익스큐터가 따로 계산함으로 값을 구할수 없음

var errorLines: Int = 0

sc.textFike("file.txt").foreach { line =>
    
	----   process lines ----
	
    if( error )
	    errorLines += 1

}

println(s"Lines with Bugs=$errorLines");

  

 

 

어큐뮬레이터 사용시 각각의 변수가 모두 driver와 연결되있으므로 count 가능함

val spark: SparkSession = ...
val errorLine = spark.sparkContext.longAccumulator("errorLine")

spark.sparkContext.parallelize(data).foreach { item =>
  if (isError(item)) {
    errorLine+=1
  }
}

println(s"Error count: ${errorLine}")

 

'Tools > Spark' 카테고리의 다른 글

Spark SQL과 Hive를 통한 데이터 처리  (0) 2024.03.26
Spark RDD 저장과 캐싱  (0) 2024.03.21
Spark RDD 연산 예제 모음  (0) 2024.03.13
Spark RDD 연산 주요 개념  (0) 2024.03.11
RDD의 생성과 데이터 처리  (1) 2024.03.11