Data Engineering

회사에 입사하고 나서 처음으로 프로덕션 환경에서 데이터 파이프 라인을 구축하고 배포한 경험을 정리해보고자 한다. 사실 프로젝트 끝난지는 한달정도가 되어가는데.. 내일 새로운 빅데이터 플랫폼 구축 프로젝트가 시작되기 전에 나의 첫 프로젝트를 먼저 회고해보기로 했다. 나는 6개월짜리 Databricks 기반의 빅데이터 플랫폼을 구축하는 프로젝트에서 데이터 엔지니어링을 담당했다.실제로는 4개월 정도 참여했으나, 프로젝트가 특이하게도 1차 배포 - 2차 배포 + 운영 의 프로세스로 진행되어 운좋게도 인프라 구축부터 파이프라인 개발, 운영 모니터링 과정의 ETL 파이프라인 개발의 한 cycle을 경험할 수 있었다. 총 4개월 - 길면 길고 짧다면 짧지만 - 동안 택시도 타고 주말도 반납하면서 실전에서 부딪히며 느..
SQL 실행 순서 SQL 쿼리를 작성할 때 JOIN 절이나 GROUP BY 절의 위치가 종종 헷갈렸는데, 이는 결국 SQL 쿼리가 실행되는 순서와 관련이 있다. FROM : 테이블 선택 JOIN : 테이블 간 결합하기 WHERE : 조건에 따라서 행을 필터링하기 GROUP BY : 필터링된 데이터를 그룹화하기 HAVING : 그룹화 된 데이터에 대해서 필터링하기 SELECT : 필요한 열을 선택하기 ORDER BY : 결과에 대해 정렬하기SELECT column_name, SUM(another_column)FROM table1JOIN table2 ON table1.id = table2.idWHERE conditionGROUP BY column_nameORDER BY column_name; JOIN 이 G..
Chapter 1. Apache Airflow 살펴보기1.1 데이터 파이프라인Task 간의 의존성을 확인하는 방법 중 하나가 pipeline 을 Graph 자료구조로 그리는 것.DAG (Directed Acyclic Graph) : 방향성 비순환 그래프. 반복 및 순환 (cycle)을 허용하지 않음.1.1.2 파이프라인 그래프 실행DAG 구성을 이용하여 정해진 순서로 Task 를 실행함.1.1.3 그래프 파이프라인과 절차적 스크립트 파이프라인 비교각 Task 를 Node 로 생성하고, Task 간의 데이터 의존성을 화살표 끝점으로 연결하여 표현함.1.1.2 예시와 다른 점은 파이프라인 첫번째 단계가 독립적인 두개의 태스크로 구성되어 있으며, 병렬로 실행할 수 있다는 점이다.Task를 순차적으로 실행하는 ..
'스파크 완벽 가이드' 책에서는 스파크 성능 향상의 기법을 크게 간접적/ 직접적인 기법으로 나누어 설명하고 있다. 또한 사용자가 제어 가능한 범위 내에서 튜닝 기법들을 소개하고 있다. 19장의 내용 중 핵심 내용을 요약과 중요한 부분을 더 정리 해보았다. 1. 간접적인 스파크 성능 향상 기법 1.1 설계 방안scala vs java vs python vs R 구조적 API 로 해결이 되지 않아, RDD 트랜스포매이션이나 UDF 를 사용해야 하는 경우 R , Python 의 사용은 피하는 것이 좋다. Python 에서 RDD 코드를 실행하게 되면, Python Process 를 오가는 데이터들을 직렬화 하면서 비용이 크게 발생하고, 안정성이 떨어지게 된다. Spark 에서 직렬화란 : 객체를 바이트 스트림..
kakfa의 등장 배경실시간으로 데이터를 처리하는 과정에서, 다수의 producer 와 consumer가 개별적인 연결을 맺는 구조의 경우 하나의 시스템만 추가되어도 통신 구조가 복잡해진다. 이런 문제를 해결하기 위해서 카프카를 통해, 메세지와 데이터의 흐름을 중앙화하여 관리한다.   Kafka 의 구성요소 producer : 정보를 제공하는 processconsumer: 정보를 제공받아서 사용하려는 processconsumer group : 카프카 컨슈머들은 컨슈머 그룹에 속한다. 여러개의 컨슈머가 같은 컨슈머 그룹에 속할 때 각 컨슈머가 해당 토픽의 다른 파티션을 분담해서 메세지를 읽을 수 있다.broker : 데이터를 저장하고 수신 및 전달하는 node (그림은 MQ == Broker 같이 보이는데..
조건에 맞는 아이템들의 가격의 총합 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/273709 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr SELECT SUM(PRICE) AS TOTAL_PRICEFROM ITEM_INFO WHERE RARITY = 'LEGEND' 물고기 종류 별 대어 찾기https://school.programmers.co.kr/learn/courses/30/lessons/293261 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤..
기본이 되는 hadoop cluster docker-compose.yml 은 아래의 repository 를 참고하였으며, presto 엔진을 사용하기 위해 수정하였다.  https://github.com/big-data-europe/docker-hadoop GitHub - big-data-europe/docker-hadoop: Apache Hadoop docker imageApache Hadoop docker image. Contribute to big-data-europe/docker-hadoop development by creating an account on GitHub.github.com docker-compose.yml 파일은 다음과 같다. version: "3"services: nameno..
chrome headless 모드에서 크롤링을 하던 중 아래와 같은 문제가 발생하였다. {logging_mixin.py:188} WARNING - /home/ubuntu/airflow_venv/lib/python3.12/site-packages/airflow/task/task_runner/standard_task_runner.py:61 DeprecationWarning: This process (pid=7115) is multi-threaded,use of fork() may lead to deadlocks in the child. grep 명령어를 사용하여 fork 가 어디에서 사용되는지 해당 파일에서 확인해 보았다. fork() 함수가 _start_by_fork() 라는 함수 내부에서 사용되고 있다...
minjiwoo
'Data Engineering' 카테고리의 글 목록