이 포스팅은 ⟪러닝 스파크(2판)⟫(제이펍, 2022년)을 공부하면서 정리한 내용입니다.
기본적으로 정형화 스트리밍을 할때 성능튜닝은 기존 포스팅에 썼던 방법을 사용해도 되지만 몇가지 고려해야 할 점들이 있다.
*고려할 점
1. 클러스터의 자원 배치
- 스트리밍 쿼리를 실행하는 클러스터들은 24/7로 돌아가기 때문에 자원을 적절하게 배치해야 한다
- 스트리밍 쿼리의 특성에 맞춰 자원 할당 해야한다. 무상태 쿼리(코어 필요), 상태 정보 유지 쿼리(메모리 필요)
2. 셔플을 위한 파티션 숫자
- 스트리밍의 경우 셔플 숫자가 정형화에 비해 적지만 너무 잘개 쪼개면 오버헤드가 발생.
- 상태 정보 유지 연산에 의한 셔플은 훨씬 큰 오버헤드를 발생.
- 기본 셔플 파티션인 200을 코어 숫자 대비 두세 배 많은 정도로 수정
3. 안정성을 위한 소스 처리량 제한
- 비용이 많이 드는 자원 과다 할당 방식 말고도 소스 전송률을 제한하여 불안정성에 대한 방어 가능
- 너무 제한을 낮게 설정하면 할당된 자원을 제대로 사용 불가
- 제한시 입력 비율이 지속적으로 증가하면 효과적으로 처리 불가능
4. 동일 스파크 애플리케이션에서 다중 스트리밍 쿼리 실행
- 동일한 SparkContext or SparkSession에서 여러개의 스트리밍 쿼리 실행은 자원을 세세하게 나눠 공유 가능
- 각 쿼리를 지속적으로 실행하는 것은 스파크 드라이버 자원을 사용하기 때문에 동시에 실행할 수 있는 쿼리를 제한
- 각 쿼리가 별도의 스케줄러 풀에서 돌도록 설정 가능(안정적인 자원 할당 가능)
#다중 스트리밍 예제
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool1")
df.writeStream.queryName("query1").format("parquet").start("path1")
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query2").format("parquet").start("path2")
'프로그래밍 > Spark' 카테고리의 다른 글
[Spark] 델타 레이크 구축 (0) | 2022.12.06 |
---|---|
[Spark] 데이터 베이스, 데이터 레이크 , 레이크 하우스 (0) | 2022.12.03 |
[Spark] 스트리밍 집계, 조인 (0) | 2022.11.29 |
[Spark] Spark 스트리밍 쿼리 (0) | 2022.11.28 |
[spark] 캐싱, 영속화, 조인 (0) | 2022.11.23 |