Data Engineering

·Data Engineering
데이터 엔지니어 분들의 이야기를 보면 회사마다 각기 다른 엔진, 서비스로 플랫폼을 구축하여 운영하고 어떤 제품이 가장 적합한지 PoC를 통해 도입하는 것 같다. 예전에 스타트업에서 인턴을 했을 때에도 Avo라는 로깅 + 모니터링 툴에 대해 데이터 엔지니어링 팀원분들과 PoC를 진행하고 실제로 도입했던 경험이 있다. 여러가지 데이터 인프라 구성요소 중에서 가장 흔하게 사용되고, 내가 현재 회사에서 사용하는 Databricks 플랫폼과 관련된 엔진들에 대해 정리해보았다. Spark vs Hadoop 먼저 빅데이터를 관리하고 처리하는데 사용되는 오픈소스 프레임워크로 Spark와 Hadoop이 있다. 현재는 주로 Hadoop에서 Spark로 넘어온 패러다임이라고 한다. Hadoop Map Reduce 연산 Ha..
https://docs.databricks.com/en/delta/merge.html#language-python Databricks documentation docs.databricks.com 데이터를 증분적재해야 하는 경우 merge() 혹은 MERGE INTO sql 문을 사용할 수 있다. [Python Code Snippet] (targetDF.alias("t") # DeltaTable 이 Target이 되어야 한다. .merge(sourceDF.alias("s"), "s.key = t.key") # merge 조건을 정한다. Source는 DataFrame이다. .whenMatchedUpdateAll() # key값이 동일한 경우 모두 변경 반영 .whenNotMatchedInsertAll() ..
운영을 위한 스파크 클러스터의 컴포넌트들과 스파크의 아키텍처에 관한 내용을 다루는 단원이다. 스파크 어플리케이션의 아키텍처 1. 스파크 드라이버 드라이버는 스파크 어플리케이션의 실행을 제어하고, 스파크 클러스터의 모든 상태 정보를 유지한다. 클러스터 매니저와 통신하여 물리적인 컴퓨팅 자원을 확보하고 익스큐터를 실행한다. 2. 스파크 익스큐터 스파크 드라이버가 할당한 태스크를 수행하는 프로세스. 익스큐터는 드라이버가 할당한 태스크를 받아 실행하고 태스크의 상태를 드라이버에게 보고한다. 3. 클러스터 매니저 스파크 어플리케이션을 실행할 클러스터 머신을 유지한다. 실행 모드 어플리케이션을 실행할 때, 요청한 자원의 물리적인 위치를 '모드'에 따라서 결정한다. 1.클러스터 모드 2.클라이언트 모드 3.로컬 모드
·Data Engineering
검색 엔진으로 알려져 있는 OpenSearch (ElasticSearch) 를 RAG로 활용한 경험에 대해 소개해보려고 한다. OpenSearch 란 무엇인가 ? ElasticSearch 와 무슨 차이지? OpenSearch 는 ElasticSearch 라는 오픈소스 제품을 AWS가 Fork 해서 개발한 제품이다. 그리고 AWS가 ElasticSearch 를 제품화 해서 서비스로 제공하는 검색 엔진 서비스가 OpenSearch 이다. 원래 오픈소스를 복사하는 일 자체는 종종 일어나지만, 오픈소스를 제품화 해서 다른 업계에 타격을 주었기 때문에 논란이 되고 있다. 2023년 기준으로 오픈서치의 다운로드 건수는 1억을 넘겼으니, 결국 AWS가 성공한 셈이다. 필자는 AWS 서비스를 사용하고 있었으며, AWS..
Spark 가 지원하는 데이터 소스를 읽고 쓰는 방법에 대한 단원이다. 데이터 소스 읽기 spark.read.format("csv")\ .option("mode", "FAILFAST")\ # 읽기 모드 .option("inferSchema", "true")\ .schema(someSchema)\ .load() 데이터를 읽을 때는 DataFrameReader를 사용하며, 이는 SparkSession의 read 속성으로 접근한다. 포맷, 스키마, 읽기 모드, 옵션 과 같은 값들을 지정해주어야 한다. 읽기 모드는 스파크가 형식에 맞지 않는 데이터를 만났을 때의 동작방식을 지정하는 옵션이다. 읽기 모드 permissive : 오류 레코드의 모든 필드를 null로 설정하고 모든 오류 레코드를 _corrupt_re..
구조적 API 의 종류 Dataset DataFrame SQL Table 과 View DataFrame 과 Dataset 의 특징 공통점 : row 와 column 을 가지는 분산 테이블 형태의 컬렉션 Dataset은 결과를 생성하기 위해 어떤 데이터에 어떤 연산을 적용해야 하는지 정의하는 지연 연산의 실행 계획이며 불변성을 가진다. 스키마에 명시된 데이터 타입의 일치 여부를 컴파일 타임에 확인한다. Dataset 은 JVM 기반 언어인 scala 와 java에서만 지원하며, Dataset의 데이터 타입을 정의하려면 scala case class 나 JavaBean 을 사용해야 한다. DataFrame은 액션을 호출하면 스파크가 트랜스포매이션을 실제로 실행하고 반환함. 스키마에 명시된 데이터 타입의 일치..
Dataset - Java, Scala 언어에서 지원하며 정적 데이터 타입에 맞는 코드를 지원하기 위한 Spark 의 구조적 API이다. - Dataset API는 타입 안정성을 지원하므로 초기화에 사용한 class 대신 다른 class로 접근할 수 없다. ex. Dataset[Person] 구조적 스트리밍 - 스트림 처리용 고수준 API - 구조적 스트리밍을 사용하면 구조적 API 로 개발된 배치 모드의 연산을 스트리밍 방식으로 실행할 수 있음. - 데이터를 읽을 때 read 대신 readStream method 를 사용 - maxFiledsPerTrigger 옵션을 추가로 지정 우선 staticDataFrame 을 기존의 csv 파일들을 읽어서 생성한다. 구조적 스트리밍으로 실행하는 예시는 다음과 같..
스파크 기본 아키텍처 스파크는 클러스터의 데이터 처리 작업을 관리하고 조율한다. 스파크가 연산에 사용할 클러스터는 Spark Standalone Cluster Manager, Hadoop YARN, Mesos 와 같은 클러스터 매니저가 관리한다. 유저가 스파크 어플리케이션을 스파크 클러스터 매니저에 submit 하면 클러스터 매니저는 자원을 할당한다. 스파크 어플리케이션 스파크 어플리케이션은 드라이버 프로세스(Driver Process)와 다수의 익스큐터 프로세스 (Executor Process) 로 구성된다. 드라이버 프로세스는 main() 함수를 실행한다. 익스큐터 프로세스는 드라이버 프로세스가 할당한 작업을 수행한다. 그리고 진행 상황을 다시 드라이버 노드에 보고한다. 스파크 API 스파크 API ..
minjiwoo
'Data Engineering' 카테고리의 글 목록 (3 Page)