Posts

    [강의 후기] Apache Spark와 Python으로 빅데이터 다루기

    개발 글쓰기 모임 글또를 통해서 Udemy 강의를 들을 수 있는 기회가 있었습니다. 데이터엔지니어링 직무에서 필요한 역량으로 Spark 기초부터 간단한 활용 예제를 다루는 강의를 들어보고 싶어서 [Apache Spark와 Python으로 빅데이터 다루기] 를 수강했습니다.  강의 구성개념 설명Spark 특징, RDD, transformation, action 연산, partitioning 등 현업에서 Spark을 사용하면서 매번 만날 수 밖에 없는 구성들과 해당 개념이 등장하게 되는 배경이나 필요성과 그 특징에 대해서 다룹니다.  실습배운 내용을 연습해볼 수 있는 구성이라는 점이 이 강의에서 가장 큰 장점이었습니다. 예시 코드에 대한 스크립트가 제공되고 실습 강의에서는 자료로 제공한 코드에 대해서 진짜 ..

    [fluent python]함수 데코레이터와 클로저

    데코레이터 데코레이터란? 파이썬 데코레이터 decorator라는 단어처럼 기존의 코드에 여러가지 기능을 추가하는 "장식"역할을 해주는 파이썬 구문 데코레이터는 다른 함수를 인수로 받는 콜러블(데코레이트된 함수) 함수를 반환하거나 함수를 다른 함수나 콜러블 객체로 대체합니다. def deco(func): def inner(): print('running inner()') return inner @deco def target(): print('running target()') target() -> 출력: running inner() print(target) -> 출력: 데커레이터는 다른 함수를 인수로 전달해서 호출하는 일반적인 콜러블과 동일하며 편리 구문(syntactic sugar)일 뿐입니다. 데코레이터..

    [python] 일급 함수 디자인 패턴

    요즘 [전문가를 위한 파이썬] 기술서적으로 파이썬 스터디를 하고 있습니다. 발표 회차에 다가와서...이번 포스트에서는 함수 객체를 이용해 Strategy 패턴을 리팩토링하는 내용을 다루겠습니다. 일급 함수란? 파이썬 함수는 일급 객체입니다. 일급 객체는 다음 작업을 수행할 수 있는 프로그램 개체입니다. - 런타임에 생성할 수 있다 - 데이터 구조체의 변수나 요소에 할당할 수 있다 - 함수 결과로 반환할 수 있다 전략(Strategy) 패턴 리팩토링 Strategy 패턴? 모든 프로그램은 문제를 해결하기 특정 알고리즘이 구현되어 있다. Strategy 패턴에서는 그 알고리즘을 구현한 부분을 모두 교환할 수 있다. 즉 알고리즘을 빈틈없이 교체해서 같은 문제를 다른 방법으로도 쉽게 해결할 수 있도록 도와주는 ..

    Spark tuning

    이번 포스트에서는 Spark 작업을 최적화하여 성능을 향상시키는 방법에 대해서 다룹니다. Spark 성능 튜닝은 시스템이 사용하는 메모리, 코어와 인스턴스를 대상으로 기록할 설정을 조정하는 프로세스를 가리킵니다. Spark 튜닝을 통해 편의성과 성능 사이의 균형을 맞추고 리소스 병목 현상을 예방하는 효과를 얻을 수 있습니다. Data Serialization 객체를 직렬화하는 부분에서 성능에 영향이 크기 때문에 Spark 어플리케이션 최적화를 위해 가장 먼저 조정합니다. 여기서 직렬화를 다루는 이유는 직렬화는 spark은 네트워크로 데이터를 전송하거나 디스크에 쓸 때 바이너리 포맷으로 변환하기 위한 과정이나 셔플과정에서 쓰이기 때문에 이부분 튜닝이 성능에 큰 영향을 줄 수 있습니다. spark에서는 ja..

    [Spark] Spark run in Cluster Mode-YARN

    이전까지 spark 스크립트를 배치로 돌리면서 클러스터에서 spark-submit커맨드를 보내기 급급했는데 어플리케이션이 클러스터에서 어떻게 실행되는지 설명할 수 있어야겠다고 생각이 들었습니다. 이번 포스트에서는 spark-submit으로 클러스터에 띄운 어플리케이션이 어떻게 실행되는지 공식 문서 내용을 정리합니다. 용어 설명 Task executor에 전달되는 작업 단위 Job Spark action에 대한 응답으로 생성되는 여러 태스크로 구성된 병렬 연산. 각각의 작업을 실행하여 전체적인 처리 과정을 분산시킵니다. Stage 개별의 job은 stage라고 불리는 소규모 태스크 세트로 분할됩니다. Application Spark 스크립트로 빌드된 프로그램. 클러스터에 driver와 executor로 구..

    [Airflow] Operators

    하나의 오퍼레이터는 Airflow에서 완수해야하는 하나의 기본 단위이다. 이번 포스트에서는 가장 많이 쓰이는 오퍼레이터인 BashOperator, PythonOperator, KubernetesPodOperator 등 모든 오퍼레이터가 상속받는 BaseOperator 내용을 보면서 필수 인자와 각 오퍼레이터별 별도 필요 인자를 살펴본다.BaseOperator Abstract base class for all operators. 모든 오퍼레이터들을 위한 추상 클래스 오퍼레이터들은 DAG 내의 노드가 되는 객체들을 생성하기 때문에, BaseOperator는 DAG 크롤링 행동을 위한 많은 재귀 메서드들을 포함하고 있다. 이 클래스에서 파생되기 위해서는, 생성자와 'execute' 메서드를 재정의하면 된다. ..

    2023 회고

    연말에 회고를 작성하며 마무리하려고 했는데 초고만 써두고 새로운 해가 되었다. 이번 글에서는 신년에 대한 기대점을 곁들여... 커리어, 일상에 대한 활동과 생각을 남긴다.커리어팀에서 진행했던 백오피스 프로덕트를 오픈할 수 있었다. 프론트, 백엔드, ETL 작업을 팀원들과 다양한 논의를 하면서 진행할 수 있어서 재밌었다. 고민이 많았던 시기에 프로덕트를 통해서 방향성이 가시화되는 것 같았다. 앞으로 더 고도화하고 회사에서 많은 편의를 만들 수 있으면 좋겠다. 한 해동안 작업을 돌아보면 빨리 잘하고 싶었고 단번에 잘하고 싶었던 욕심이 컸다. 다른 동료들이 쌓아온 시간과 연습들은 안 보이고 그 높이와 속도만 비교되었다. 그런 마음을 단번에 모두 내려놓을 수는 없겠지만 이제는 공부도 연습이라고 생각하고 접근하려..

    Airflow Concept

    Airflow는 배치성으로 처리가 필요한 워크플로우를 개발하고 스케쥴링하고 모니터링하는 오케스트레이션 플랫폼이다. 스트리밍 솔루션이 아니기 때문에 계속 돌아가는 이벤트기반 워크플로우를 위해 설계되지 않았다. 보통은 Kafka를 통해서 실시간 데이터를 입수 및 처리해서 스토리지에 쌓고 Airflow가 주기적으로 데이터 처리를 시작한다. 이번 포스트에서는 Airflow의 기본 개념과 중요한 구성 요소들을 간단하게 소개한다. 스크립트 작성보다 기존에 사용하던 Airflow의 기본 철학을 이해하고 DAG를 구성하면서 사용했던 인자들을 복습하는 장이다. Workflow airflow에서는 워크플로우를 코드로 정의할 수 있다는 특징을 가진다. 이런 특성은 다음 목적을 위해 구현된다. Dynamic: 파이썬 코드로 ..