[Airflow & Spark] 대용량 데이터 처리 자동화하는 방법

궁금하면 500원·2024년 11월 23일

데이터 저장하기

목록 보기
6/23

Airflow의 Task 간 데이터 처리

Airflow에서는 DAG(Directed Acyclic Graph)를 사용하여 여러 Task를 정의하고, 그 Task들이 순차적 또는 병렬로 실행되도록 관리합니다.

각 Task는 독립적으로 실행되며, 데이터를 한 Task에서 다른 Task로 넘길 때 몇 가지 제약이 있습니다.

  • Task 간 데이터 넘기기: Airflow에서는 각 Task 간에 데이터를 넘길 때 XCom(Cross-communication)을 사용합니다.
    XCom은 Task 간에 작은 데이터를 공유하는 메커니즘을 제공하는데, 기본적으로 2KB 이하의 데이터를 넘길 수 있습니다.
    그래서 데이터가 크거나 복잡하면 XCom을 통해 데이터를 넘기는 것이 적합하지 않다고 볼 수 있습니다.

    예를 들어, Task A에서 처리한 데이터를 Task B로 넘기고 싶다면, Task A가 데이터를 XCom을 통해 Task B에 넘기는데, 이 때 데이터가 2KB를 초과하면 XCom으로는 전달할 수 없습니다.

대용량 데이터 처리 방법

대용량 데이터의 경우 XCom을 통해 전달하기에 너무 크기 때문에, 일반적으로는 외부 저장소(예: DB, HDFS, S3 등)에 데이터를 저장하고, 다른 Task가 그 데이터를 조회하여 사용하는 방식이 더 효율적입니다.

이 경우, 데이터를 파일 형태로 저장하거나 데이터베이스 테이블에 저장하고, 이후 작업에서 이를 조회하여 처리하는 방식이 일반적입니다.

1. DB Connection 사용

Airflow Task 간에 데이터를 넘기지 않고, 각 Task는 데이터베이스나 파일 시스템 등 외부 저장소에 직접 조회하거나 저장합니다.

예를 들어, 첫 번째 Task에서 데이터를 처리한 후, 처리된 데이터를 DB에 INSERT하거나,
CTAS(Create Table As Select)를 사용해 테이블을 작성합니다.

이후 두 번째 Task는 해당 DB에서 데이터를 조회하거나 수정하는 방식입니다.

2. 파일로 떨구기

데이터를 파일 시스템(예: S3, HDFS, 로컬 파일 시스템)에 저장한 후, 다른 Task가 그 파일을 읽어 처리하는 방식입니다.

이 경우 데이터가 크기 때문에 파일에 저장하는 방식이 훨씬 효율적입니다.

예를 들어, Task A에서 데이터를 처리하고 그 결과를 CSV, Parquet, JSON 등의 파일로 저장합니다. Task B는 그 파일을 읽어 다시 처리하는 방식입니다.

Spark의 사용

Spark는 대용량 데이터 처리에 특화된 시스템입니다.

Airflow와 함께 Spark를 사용하는 이유는 Airflow가 주로 작업의 흐름을 관리하는 도구이고, Spark는 대규모 데이터의 분산 처리를 맡기 때문입니다.

예를 들어, Airflow에서 Spark 작업을 호출하거나, Spark를 사용하여 대용량 데이터를 처리한 후 결과를 데이터베이스나 파일로 저장하고, 그 데이터를 이후의 Airflow Task에서 사용하는 방식입니다.

1. XCom을 사용한 데이터 전달의 한계

  • Airflow의 XCom은 기본적으로 작은 데이터(2KB 이하)를 전달하는 데 적합하지만, 대용량 데이터를 처리하는 데에는 한계가 있습니다.
    따라서 대용량 데이터를 파일 시스템 또는 데이터베이스에 저장하고, 이후 다른 Task에서 이를 조회하는 방식이 필요합니다.

2. Spark와 Airflow 연동

  • Spark와 같은 대규모 데이터 처리 시스템을 Airflow와 연동하려면, Airflow 내에서 Spark 작업을 배치 처리하거나 분산 처리하는 작업을 실행하는 작업(Task)을 정의할 수 있습니다.

  • 예를 들어, Spark에서 대규모 데이터 분석을 처리한 후, 그 결과를 HDFS나 S3와 같은 분산 파일 시스템에 저장하고, 이후 Airflow의 다른 Task들이 그 데이터를 활용하는 방식입니다.

3. 분산 처리

만약 대용량 데이터가 매우 크고, 분산 처리가 필요한 경우 Spark 또는 Hadoop 클러스터를 사용하여 데이터를 처리하고, 그 결과를 후속 작업에서 처리하는 방식이 더 적합합니다.

4. 외부 시스템 활용

  • 대용량 데이터를 다루는 경우, 데이터베이스 외에도 HDFS, S3, Redshift, BigQuery와 같은 분산 파일 시스템 또는 데이터 웨어하우스를 활용할 수 있습니다.

이 경우, Airflow는 주로 데이터 처리 및 흐름을 관리하고, 실제 데이터 처리 및 저장은 외부 시스템에서 이루어집니다.

정리

  • Airflow는 작업의 흐름을 관리하는 도구이고, 데이터 간의 크기가 큰 경우 XCom 대신 DB, 파일 시스템, 또는 분산 처리 시스템(예: Spark)을 사용하여 데이터를 넘깁니다.

  • 대용량 데이터는 파일로 떨구거나 DB에 저장하고, 각 Task는 이를 조회하여 처리하는 방식이 더 효율적입니다.

  • Spark와 같은 분산 처리 시스템은 대용량 데이터를 처리하는 데 매우 유용하며, Airflow와 연동하여 대규모 데이터 파이프라인을 구축할 수 있습니다.

profile
에러가 나도 괜찮아 — 그건 내가 배우고 있다는 증거야.

0개의 댓글