Dataproc
- Apache Spark와 Apache Hadoop 클러스터를 더 간단하고 효율적으로 실행할 수 있게 도와줄 수 있는 관리형 서비스
- 특징
- 알려진 크기의 데이터를 갖고 있거나 소유하고 있는 클러스터의 크기를 관리할 때 유용함
- 실시간으로 보여지거나 예측할 수 없는 크기라면, C
loud Datatflow를 사용 권장
- dataproc과 로컬 spark 사용 차이점
- Google Cloud Dataproc과 BigQuery 통합
- 통합성: Dataproc은 Google Cloud의 일부로, BigQuery와의 통합이 원활함. 예를 들어, BigQuery에서 직접 데이터를 읽거나 쓰는 것이 간편함. Dataproc 클러스터는 Google Cloud의 네트워크 내에서 실행되기 때문에 높은 대역폭과 낮은 지연 시간으로 데이터에 액세스할 수 있음
- 보안: Dataproc 클러스터는 Google Cloud의 보안 모델을 활용하여 보호받음. 이는 데이터 액세스와 전송을 보호하는 강력한 보안 체계를 의미함
- 관리 및 유지 보수: Google Cloud에서 관리하는 서비스로서, 인프라 관리에 대한 부담이 크게 줄어듦. 클러스터 관리, 스케일링, 모니터링 등이 간소화되어 있어 개발자가 애플리케이션 개발에 더 집중할 수 있음
- 로컬 Spark와 BigQuery 연결
- 환경 설정: 로컬에서 Spark를 실행하려면 자체적으로 Spark 환경을 설정해야 함. 이는 Java, Scala, Python 등 Spark 실행에 필요한 여러 구성 요소의 설치를 포함함
- 연결 설정: BigQuery에 연결하기 위해 별도의 라이브러리(예: spark-bigquery-connector)를 설치하고 구성해야 함. 이 과정에서 자격증명과 액세스 권한을 적절히 관리해야 하며, 로컬 환경의 보안 설정도 중요함
- 네트워크 지연 및 데이터 전송 비용: 로컬에서 BigQuery에 액세스할 때는 인터넷을 통해 데이터를 전송해야 함. 이는 추가적인 네트워크 지연과 데이터 전송 비용을 발생시킬 수 있음
- 스케일링과 유지 관리: 로컬 환경에서는 사용자가 직접 클러스터를 관리하고 스케일링해야 함. 이는 추가적인 시간과 리소스가 필요하며, 장애 대응 및 유지 보수에 대한 책임도 사용자에게 있음
- Google Cloud Dataproc과 BigQuery 통합
- 정리
- 기존에 Apache Hadoop과 Spark 환경을 가지거나 직접 DevOps를 하는 환경을 원하는 사용자라면 Dataproc을 사용하는 것을 추천
스트리밍 및 배치 데이터 처리를 Serverless로 하고자 한다면 Dataflow를 추천(하지만 자료 부족으로 비추천)- 시도는 해봐도 좋음!
- 추가로 dataproc은 서버리스로도 기능을 제공함
- 하지만 오직 spark만 위해서 사용 되는것으로 보임(kafka, flink 등 지원 안됨)
Dataflow
- Apache Beam을 완전 관리형 서비스로 출시한 제품으로 서버리스 특징으로 작업의 양에 따라 리소스를 자동으로 프로비저닝하고 관리함
- 배치와 스트리밍 데이터 처리가 둘 다 가능함
- 데이터 파이프라인 구축 이라는 의미에서 오케스트레이션 툴 이라고도 생각할 수 있지만 전혀 아님. 오히려 데이터 프로세싱 엔진의 일종임.
- Beam의 데이터파이프라인을 구성하는 두가지 주요 오브젝트는 Pcollections와 PTransfroms
- Pcollection(Pararell collection)
- 파이프라인 안의 모든 데이터는 PCollection안에 존재
- 분산 데이터 셋이며 immutable함
- 하나의 단계에서 출력 값을 다음 단계의 입력으로 전달함
- Ptransform(Pararell transform)
- 하나 이상의 Pcollection을 입력으로 받고 하나 이상의 Pcollection을 출력 함
- 기본적으로 map, filter, groupby 등과 쓰이고 사용자 정의 함수도 사용 가능
- 예를 들어, 데이터를 읽고 파싱하고 변환하는 등의 작업을 Ptransform으로 정의할 수 있음
- ParDo
- Pcollection안에서 복잡한 계산의 편의를 위해 파이프라인 밖에서 class를 정의해서 함수로 구현한 형태(위에 말한 사용자 정의 함수임)
import apache_beam as beam #ParDo class ComputeWordLengthFn(beam.DoFn): def process(self, element): return [len(element)] with beam.Pipeline() as p: lines = p | 'Read' >> beam.io.ReadFromText('input.txt') line_lengths = lines | 'ComputeLength' >> beam.ParDo(ComputeWordLengthFn()) line_lengths | 'Write' >> beam.io.WriteToText('output.txt')
- Pcollection(Pararell collection)
- 누군가의 중요한 정보
- Beam + Bigquery의 조합이 별로(제약사항 존재)
- Python 보단 Java SDK가 나음
- 차라리 스파크(dataproc)가 나음
'데이터엔지니어링' 카테고리의 다른 글
EC2 인스턴스 위에 Airflow 설치 (3) | 2024.02.29 |
---|---|
airflow Import MysqlDb 에러 해결과정 (1) | 2023.12.21 |
Airflow설치 - docker기반 (0) | 2023.12.14 |