분류 전체보기
-
[Spark] RangePartitioner 알아보기Spark 2024. 7. 29. 05:38
- 목차 Partitioner 란 ? Spark 는 Wide Dependency Transformation 을 경계로 Stage 가 분리됩니다. GroupByKey, Join, PartitionBy, CoGroup 등과 같은 연산은 데이터의 셔플링을 유발하며, 이를 경계로 Stage 가 분리되게 됩니다. 이때 이전 Stage 와 후속 Stage 로 나뉘며, 아래와 같은 모습의 DAG 시각화가 이루어집니다. 위 과정에서 첫번째 Stage 를 Map-Side Task 그리고 두번째 Stage 는 Reduce-Side Task 또는 Mapper Task, Reduer Task 라고 부르기도 합니다. Partitioner 는 Mapper Task 에서 데이터들을 어떻게 새로운 Partition 으로 분류할..
-
[Spark] RDD combineByKey 알아보기Spark 2024. 7. 29. 05:38
- 목차 들어가며.Spark RDD 연산에서 대부분의 셔플링 연산은 combineByKey 로 변형됩니다.예를 들어서 reduceByKey, aggregateByKey, countByValue, join 연산 등은 내부적으로 combineByKey 를 활용하게 됩니다.즉, Wide Transformation 을 유발하는 셔플링 연산은 내부적으로 반드시 combineByKey 를 활용합니다.이번 글에서는 combineByKey 의 기본적인 사용법과 다른 Wide Transformation 연산과의 관계에 대해서 알아봅니다. combineByKey 사용하기.아래의 예시는 1 부터 1000 까지의 숫자들 중에서 홀수와 짝수의 총 갯수를 파악하는 간단한 예시 코드입니다.그리고 combineByKey 를 사용하여..
-
[Spark] MapOutputTracker 알아보기Spark 2024. 7. 29. 05:37
- 목차 MapOutputTracker 란 ?스파크는 하둡의 MapReduce 처럼 Map 과 Reduce 라는 표현을 사용합니다.셔플링이 발생하는 Wide Transformation 을 경계로 이전 Stage 를 Map Task, 후속 Stage 에 Reduce Task 를 배치합니다.그리고 아래의 이미지처럼 Map Task 는 Reduce Task 에게 Shuffle Block 이라는 데이터들을 전달하게 됩니다. Shuffle Block 은 Map Task 가 처리한 데이터의 결과물이며, BlockManager 에 의해서 관리됩니다.MapOutputTracker 는 셔플링 과정에서 Map Task 가 생성한 결과물을 추적/관리하는 스파크의 구성요소이며,이는 Driver 와 Executor 에 각각 ..
-
[Spark] Block 알아보기Spark 2024. 7. 26. 17:21
- 목차 RDD Cache Block.먼저 알아볼 Block 의 종류는 RDD Cache Block 입니다.RDD 의 cache 나 persist 함수를 통해서 RDD 를 캐싱할 수 있게 됩니다. import org.apache.spark.storage.StorageLevelval baseRdd = sc.parallelize(1 to 10, 4).map { x => x * 2}val cachedRdd = baseRdd.persist(StorageLevel.DISK_ONLY)val sum1 = cachedRdd.sum()println(s"First sum: $sum1") Disk 에 저장된 Cache Block.캐싱된 RDD 는 Block 이라는 파일 형태로 Disk 에 저장됩니다.저장되는 File P..
-
[Spark] s3a Protocol 에서 Driver 가 파일 존재를 확인하는 과정Spark 2024. 7. 23. 06:11
- 목차 들어가며.Spark Driver 는 s3a Protocol 을 사용함으로써 S3 에 존재하는 Object File 을 Read 할 수 있습니다.S3 에 존재하는 파일을 실질적으로 다운로드하는 주체는 Spark 의 Worker Node 이지만,Driver 는 S3 에 지정된 File 이 존재하는지 유무를 먼저 체크하게 됩니다. 이번 글에서는 Driver 가 어떠한 방식으로 S3 로부터 File 존재 유무를 체크하는지 알아보는 시간을 가지겠습니다. Driver 는 S3 ListObjectV2 API 를 활용한다.먼저 아래와 같은 형식으로 Spark Application 스크립트를 준비합니다.그리고 S3 를 Minio 로 대체합니다.from pyspark.sql import SparkSession..
-
[HikariCP] keepaliveTime 와 관련된 여러가지 실험Java 2024. 7. 22. 18:22
- 목차 keepaliveTime 이란 ?keepaliveTime 설정은 Idle Connection 과 관련이 있습니다.HikariCP Connection Pool 에서 Idle Connection 은 idleTimeout 이후에 제거됩니다.Idle Connection 이란 Connection 과 데이터베이스 사이에 맺어진 TCP Socket 사이에 어떠한 Packet 도 전달되지 않는 상태의 Socket 을 의미합니다.즉, 어떠한 쿼리 요청도 발생하지 않는 Connection 을 Idle Connection 이라하며, 이는 10분이라는 기본값을 가집니다.10분 동안 통신이 전무한 Connection 은 제거됩니다. keepaliveTime 은 Idle Connection 으로 연결된 TCP Socke..
-
[HikariCP] idleTimeout 알아보기Java 2024. 7. 18. 06:08
- 목차 idleTimeout 이란 ?HikariPool DataSource 는 maximumPoolSize 를 통해서 최대 Connection 의 갯수를 지정할 수 있습니다.만약에 maximumPoolSize 를 6개로 설정한다면 아래의 이미지처럼 하나의 Connection Pool 은 최대 6개의 Connection 을 보유합니다. Connection Pool 이 데이터베이스와 맺는 이 Connection 은 사실상 TCP Network Connection 이며, 아래의 출력 결과와 같이 TCP Socket 이 생성되게 됩니다.( lsof 명령어나 MySQL 의 show processlist; 명령어 등을 통해서 현재 생성된 TCP Socket 을 확인할 수 있습니다. )lsof -iCOMMAND..
-
[HikariCP] connectionTimeout 설정 알아보기Java 2024. 7. 11. 05:56
- 목차 connectionTimeout 이란 ?HikariPool 은 Java 에서 사용하는 Connection Pool 모듈입니다.지정된 갯수만큼 많은 양의 Connection 을 미리 생성해두며, 생성된 Connection 을 하나씩 사용할 수 있습니다. 아래의 이미지는 2개의 Connection 이 존재하고, 3번의 Connection 요청이 발생하는 상황입니다.Connection Pool 에서 Connection 을 요청한 2개의 Client 또는 Thread 는 정상적으로 Connection 을 사용할 수 있습니다.반면 3번째 Client 또는 Thread 는 Connection Pool 에 더 이상 Connection 이 없기 때문에 Connection 을 획득할 수 없습니다.이 상황에서 ..
-
[flink-conf.yaml] jobmanager 메모리 설정 알아보기 ( JVM, Heap, Off-Heap, Overhead )Flink 2024. 7. 11. 05:55
- 목차 들어가며.Apache Flink 의 flink-conf.yaml 파일은 Flink 클러스터의 전반적인 동작과 리소스 관리를 설정하는 설정 파일입니다. 이번 글에서는 flink-conf.yaml 에서 JobManager 메모리를 설정하는 방법과 이를 최적화하는 방법에 대해 알아보겠습니다. jobmanager.memory.process.sizejobmanager.memory.process.size 는 JobManager 라는 하나의 프로세스가 사용할 수 있는 메모리의 총량이라고 생각하시면 됩니다. 사실 일반적인 Process 는 가상 메모리 방식을 사용하기 때문에 그 내부적으로 메모리 제한이 특별히 존재하진 않습니다. 그럼 어떠한 방식으로 Process 에 Memory 제한을 둘 수 있을까요 ? ..
-
[Spark] RDD GroupBy 와 Shuffle 알아보기Spark 2024. 7. 9. 06:23
- 목차 GroupBy 와 Wide Transformation.Spark 연산은 크게 Transformation 과 Action 으로 나뉩니다.Transformation 은 Filter, Map, FlatMap 처럼 데이터를 직접적으로 변형하는 연산을 의미하며,Action 은 Collect, Count, Reduce 와 같이 연산을 마무리짓고, 결과를 Driver 에게 응답하는 동작을 의미합니다.더 나아가서 Transformation 은 Narrow Transformation 과 Wide Transformation 으로 분류되는데요.Group By 는 대표적인 Wide Transformation 의 한 종류입니다. Group By 의 연산의 동작을 시각적으로 표현하면 아래와 같습니다.Group By 는..