Spark.sql.shuffle.partitions 이 변수 하나로 다양한 상황의 shuffling을 해결하기는 쉽지 않음 MapReduce 세상에서 mapreduce.job.reduces와 동일 적은 수의 Partition은 병렬성을 낮추고 OOM과 disk spill의 가능성을 높임 -> processing 시간이 오래 걸림 많은 수의 Partition은 task scheduler와 task 생성과 관련된 오버헤드가 생기며 너무 흔한 네트워크 I/O 요청으로 병목 초래 만약 Spark Engine Optimizer가 알아서 Partition의 수를 결정할 수 있다면? -> AQE의 목적 AQE "Dynamic query optimization that happens in the middle of qu..
Spark 데이터 시스템 아키텍처 데이터 병렬처리가 가능하려면? 1. 데이터가 먼저 분산되어야 함 하둡 맵의 데이터 처리 단위는 디스크에 있는 데이터 블록 (128MB) hdfs-site.xml에 있는 dfs.block.size 프로퍼티가 결정 Spark에서는 이를 파티션이라고 부름. 파티션의 기본 크기도 128MB spark.sql.files.maxPartitionBytes: HDFS등에 있는 파일을 읽어올 때만 적용됨 2. 나눠진 데이터를 각각 따로 동시 처리 맵리듀스에서 N개의 데이터 블록으로 구성된 파일 처리시 N개의 Map 태스크가 실행 Spark에서는 파티션 단위로 메모리로 로드되어 Executor가 배정됨 처리 데이터를 나누기 -> 파티셔닝 -> 병렬처리 적절한 파티션의 수 = Executo..
데이터 처리의 일반적인 단계 데이터 수집 (Data Collection) 데이터 저장 (Data Storage) 데이터 처리 (Data Processing) 이 과정에서 서비스 효율을 높이거나 의사결정을 더 과학적으로 하게 됨 데이터 처리의 고도화 처음에는 배치로 시작 처리할 수 있는 데이터의 양이 중요 (얼마나 큰 데이터를 한꺼번에 처리할 수 있는가) 서비스가 고도화되면서 실시간 처리 요구가 생기기 시작 Realtime 처리 vs Semi Realtime 처리 동일 데이터 소비가 필요한 케이스 증가: 다수의 데이터 소비자 등장 처리량(Throughput) vs 지연시간(Latency) 처리량(Throughput): 주어진 단위 시간 동안 처리할 수 있는 데이터의 양 클수록 처리할 수 있는 데이터의 양이..