꾸준히 오래오래

데이터 엔지니어의 공부 곳간✏️

Data 8

맵리듀스(MapReduce)의 개념과 원리

맵리듀스(MapReduce)란 맵리듀스(MapReduce)는 대용량 데이터를 처리하는 데 사용되는 병렬 프로그래밍 모델 및 처리 방식으로, 2004에 구글에 의해 발표되었다. 주로 분산 처리 환경에서 사용되며, 대용량의 데이터를 효율적으로 처리하기 위한 목적이다. 맵리듀스는 크게 Map과 Reduce 단계로 구성이 된다. 맵(Map)은 입력된 데이터를 분할하고, 매핑하여 가공하는 단계이다. 리듀스(Reduce)는 맵(Map)으로 가공된 데이터의 중복을 제거하고 축소하는 역할을 한다. 맵리듀스는 이렇게 대용량의 데이터를 분산처리 환경에서 분할 및 가공 후 축소 하며 데이터를 가공하는 과정이다. 맵리듀스(MapReduce)의 처리 과정 맵리듀스의 처리과정을 살펴보면 기존의 맵과 리듀스의 과정을 조금 세분화 ..

Data 2024.04.04

[Kubernetes] 파드 라이프 사이클과 Probe(liveness, readiness, startup)

파드(pod)는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다. 파드는 하나 이상의 컨테이너로 구성되어 있다. apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 일반적으로 파드는 직접 생성하지 않고, 워크로드 리소스(디플로이먼트, 레플리카셋 등)를 사용하여 생성한다. 실제로 운영 환경에서는 애플리케이션을 단일 파드로 운영하는 경우가 거의 없기 때문이다. 파드는 기본적으로 파드에 속한 컨테이너에 네트워킹과 스토리지라는 두 가지 종류의 공유 리소스를 제공한다. 워크로드 리소스를 통하여 여러 파드를 만들고..

Data/Kubernetes 2024.03.31

[Kubernetes] 쿠버네티스 클러스터 아키텍쳐

노드 쿠버네티스 워커머신으로 각 노드는 컨트롤 플레인에 의해 관리된다. 하나의 노드는 여러 개의 파드를 가질 수 있으며, kubelet과 컨테이너 런타임 그리고 kube-proxy로 구성된다. 노드 상태 노드의 상태의 경우 다음과 같이 확인 가능하다. kubectl describe node 여기서 얻을 수 있는 상태 정보의 경우는 다음과 같다. 주소 HostName(노드의 커널에 의해 알려진 호스트명) ExternalIP (외부로 라우트 가능한 ip) InternalIP(클러스터 내에서만 라우트 가능한 ip) 컨디션 먼저, conditions 필드는 모든 Running 노드의 상태를 기술한다. 그 외에 용량과 할당 가능 그리고 기타 세부 정보 노드 상에 사용 가능한 리소스 커널 버전, 쿠버네티스 버전, ..

Data/Kubernetes 2024.03.24

[Kubernetes] 쿠버네티스 오브젝트

쿠버네티스 오브젝트는 클러스터 상태를 나타내는 단위로 의도를 담은 레코드이다. 오브젝트를 생성하게 되면 k8s는 그 오브젝트 생성을 보장하기 위해 지속적으로 작동한다. 오브젝트를 생성함으로써, 클러스터 워크로드가 어떤 형태로 보이고자 하는지에 대해 효과적으로 쿠버네티스 시스템에 전달한다. 이것이 바로 클러스터에 대한 의도한 상태가 된다. 공식 문서의 정의를 조금 풀어보면 오브젝트는 쿠버네티스 클러스터 내에서 일어나는 모든 것을 설명해 주는 레코드인데, 복제본이 몇 개 필요하고 네트워크 설정은 어떻게 하고 등이 이 레코드에 담기게 된다. 이들은 영속성을 가지기 때문에 쿠버네티스는 이 레코드에 적힌 대로 유지하기 위해서 노력한다. 오브젝트에는 무엇이?👀 오브젝트에 대해서 더 알아보기 전에 그럼 오브젝트에는 ..

Data/Kubernetes 2024.03.17

[Kubernetes] 쿠버네티스 컴포넌트

쿠버네티스 컴포넌트는, 쿠버네티스 클러스터를 구성하는 핵심 프로세스나 구성 요소로 크게 컨트롤 플레인 컴포넌트, 노드 컴포넌트, 애드온이 있다. 컨트롤 플레인 컴포넌트 컨트롤 플레인은 클러스터에 관한 전반적인 결정(ex: 스케줄링)을 수행하고 클러스터 이벤트 감지하고 반응한다. 일종의 두뇌역할 kube-apiserver k8s API를 노출하는 컴포넌트, 컨트롤플레인의 프런트엔드이다. etcd 모든 클러스터 데이터를 담는 저장하는 분산형 키- 값 저장소이다. kube-scheduler 새로운 파드의 배치를 결정한다. 어피니티 등을 고려한다. kube-controller-manager 다양한 리소스 컨트롤러들을 실행하며, 클러스터의 상태를 지속적으로 감시하고 조정한다. API 서버를 통해서 클러스터의 공유..

Data/Kubernetes 2024.03.10

[Airflow] Custom Operator 생성 시, template_fields 알아보기

Airflow를 사용하다 보면, 상황에 맞게 필요한 Custom Operator를 생성하게 된다. 보통 batch job을 돌리며서 logical_date, ds, data_interval_start와 같은 날짜 템플릿 변수를 자주 사용하며, 이는 Custom Operator의 경우에도 마찬가지이다. 이때 Jinja template을 이용하여 Custom Operator를 매개변수화 할 수 있으며, template_fields에 있는 필드 이름을 Operator를 렌더링 하는 동안 템플릿으로 간주한다. Templating 아래는 HelloOperator라는 BashOperator를 상속받아 생성한 custom operator의 예시이다. class HelloOperator(BaseOperator): te..

Data/Airflow 2024.03.02

[Bigquery] 빅쿼리란?

빅쿼리란 Bigquery란 Google Cloud Platform에서 제공하는 완전 관리형의 엔터프라이즈 데이터 웨어하우스이다. 대용량의 데이터를 저장하고 쿼리 및 분석하는 데 사용되며, 최근에는 Bigquery ML을 통해서 머신러닝 모델도 제공하고 있다. 완전 관리형이기 때문에 사용자가 인프라 관리에 대한 부담감 없으며, 가격의 경우에는 컴퓨팅(분석), 스토리지, 추가 서비스, 데이터 수집 및 추출을 기준으로 책정이 된다. Bigquery는 GoogleSQL이라는 Google Standard SQL을 통하여 쿼리를 작성하여 결과를 얻는데, 확장 가능한 분산형 분석 엔진을 통해 테라파이트 급 쿼리를 초 단위로 수행하고, 페타바이트 급 쿼리를 분 단위로 쿼리 할 수 있다. 빅쿼리 특성 Bigquery가 ..

Data/Bigquery 2024.02.25

[Kafka] producer max.request.size configuration 오류 및 궁금증

kafka로 cdc 구축을 위해 테스트하던 중, max.request.size를 넘었다는 오류가 발생하였다. 해당 오류는 Producer에서 보낼 수 있는 요청 당 최대 메시지 크기를 넘었다는 것이었다. 카프카 공식 문서에서 프로듀서 config에 해당 설정이 있으며 기본적으로 약 1MB로 되어있다. 해당 문제를 해결 위해서는, producer의 max.request.size를 늘려주고, 그에 따라서 kafka broker의 message.max.byte도 살펴보아야 한다. 카프카 공식 문서 max.request.size 정의 The maximum size of a request in bytes. This setting will limit the number of record batches the pro..

Data/kafka 2023.02.17