분류 전체보기
-
[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 는..
-
[Spark] RDD treeReduce 알아보기Spark 2024. 7. 9. 06:23
- 목차 일반적인 Reduce 연산.일반적인 Reduce 연산은 리스트를 스칼라 값으로 변환합니다. 대표적으로 sum, count, min, max 등의 Aggregation 연산들은 리스트를 하나의 스칼라 값을 출력하게 됩니다. Spark 의 RDD Reduce 연산 또한 하나의 리스트를 분산시켜 Aggregation 연산을 수행한다는 점에서 이하동문입니다. 하나의 리스트를 분할하여 Task 또는 Partition 을 만든 후 여러 Executor 로 전달합니다. 각 Executor 는 Driver 로부터 전달받은 Task 를 처리합니다. 처리된 Task 는 Driver 로 반환됩니다. 이때 Task 의 갯수가 N 개라면 Driver 로 전달되는 결과는 N 개의 결과값을 받게 됩니다. 그리고 Driv..
-
[Spark] RDD Reduce 내부 동작 알아보기Spark 2024. 7. 9. 06:23
- 목차 Reduce Action 은 Local Aggregation 을 수행한다.reduce 는 RDD 의 대표적은 Action 연산 중 하나입니다.Reduce Action 이 실행되면서 Driver 는 Task 들을 생성하여 Worker Node 의 Executor 에게 전달합니다.아래의 스크립트는 0 ~ 9999 에 해당하는 숫자들 중에서 홀수와 짝수의 갯수를 Reduction 하는 Spark 스크립트입니다. from pyspark.sql import SparkSessionif __name__ == '__main__': spark = (SparkSession.builder .master("spark://127.0.0.1:7077") .appName("..
-
[Java Serialization] 여러가지 자바 직렬화 해석 방식들Java 2024. 7. 6. 07:05
- 목차 https://docs.oracle.com/en/java/javase/17/docs/specs/serialization/protocol.html Java Object Serialization Specification: 6 - Object Serialization Stream ProtocolA set of flags indicating various properties of the class, such as whether the class defines a writeObject method, and whether the class is serializable, externalizable, or an enum typedocs.oracle.com sr (73 72) 로 시작하는 바이트 스트림.아래와 ..
-
[Spark] RegisterApplication RPC 알아보기Spark 2024. 7. 6. 07:05
- 목차 RegisterApplication RPC 란 ?RegisterApplication 이란 Driver 가 Master Node 나 Resource Manager 에게 어플리케이션을 등록하기 위한 RPC 요청입니다.Spark Driver가 실행되면, Spark Master 와 통신하여 "새로운 Application을 등록하고 싶다" 라는 메시지를 보냅니다.즉, Driver 가 곧 Application 과 일대일로 매칭되는 단위라고 생각하셔도 됩니다. RegisterApplication RPC 요청은 아래의 두가지 데이터를 Master 에게 전달합니다.ApplicationDescription 은 Executor 의 스펙을 정의합니다.몇 개의 Executor 를 사용하며, 각 Executor 의 C..
-
[Kafka] Producer 의 EndTxn API 알아보기 ( Commit or Abort , Transaction Coordinator )Kafka/Kafka Producer 2024. 7. 4. 07:16
- 목차 EndTxn API 란 ?EndTxn API 는 Transactional Producer 가 트랜잭션을 종료하기 위해서 브로커에게 전달하는 API 입니다.카프카 라이브러리에서는 commit_transaction or abort_transaction 와 같은 추상화된 함수로 표현되곤 합니다.이러한 함수가 실행되면 내부적으로 EndTxn API 의 Request/Response 가 동작하게 됩니다. EndTxn API 의 형식은 아래와 같습니다.EndTxn Request (Version: 1) => transactional_id producer_id producer_epoch committed transactional_id => STRING producer_id => INT64 produce..
-
[Kafka] Connect Worker 와 FindCoordinator API 알아보기Kafka/kafka Connect 2024. 7. 1. 06:15
- 목차 FindCoordinator API 란 ?FindCoordinator 란 Group Coordinator 또는 Transaction Coordinator 를 찾는 작업을 의미합니다.Coordinator 는 여러 브로커 중 하나의 브로커를 의미하며, Kafka Consumer 나 Producer 의 동작을 지원하기 위해서 존재합니다.예를 들어, Kafka Producer 는 transactional.id 와 매칭되는 Broker 가 있는데, 이를 Transaction Coordinator 라고 합니다.이 Transaction Coordinator 는 Producer 의 Producer ID 를 생성해주며, Producer Epoch 를 관리합니다.또한 __transaction_state 토픽이 트..
-
[Kafka] __consumer_offsets Topic 알아보기Kafka/Kafka Consumer 2024. 7. 1. 06:15
- 목차 __consumer_offsets Topic 의 생성 시점."__consumer_offsets" Topic 은 Kafka 의 내장된 토픽입니다.그래서 이는 "kafka-topics.sh" 명령어를 사용하여 사용자가 직접 생성하는 토픽이 아닙니다.하지만 빌트인 형태로 존재하는 토픽이더라도 __consumer_offsets 토픽은 카프카 클러스터가 생성됨과 동시에 생성되지 않습니다.__consumer_offsets 토픽은 최초로 Consumer 가 실행되는 시점에 생성되며, Lazy 한 방식으로 __consumer_offsets 토픽을 생성합니다. 아래의 명령어는 현재 생성된 토픽의 목록을 출력하는 명령어입니다.( 저의 경우에는 카프카 브로커의 advertised.listeners 주소가 kafka..
-
[Kafka] Static Membership 과 Partition Assignment 관계 알아보기 ( group.instance.id )Kafka/Kafka Consumer 2024. 6. 30. 14:57
- 목차 들어가며.Kafka Consumer 들은 group.id 를 기반으로 하나의 Consumer Group 을 형성합니다.그리고 각각의 Consumer 들은 자신의 고유한 member id 를 가지게 되는데요.이 member id 는 Consumer 가 Group Coordinator 에게 JoinGroup API 를 요청함으로써 생성됩니다.즉, Consumer 는 Group Coordinator 가 생성해주는 랜덤한 식별값을 전달받아 자신의 member id 로써 사용합니다.이 과정에서 Leader Consumer 가 선정되고, 나머지 Consumer 들은 Follower Consumer 가 됩니다.( 가장 먼저 JoinGroup API 를 요청한 Consumer 가 Leader Consumer ..