EMR에서 Step의 개념
아마존 EMR(Amazon Elastic MapReduce)에서 Step은 클러스터 상에서 수행되는 작업(잡, 태스크) 단위를 추상화한 개념임.
EMR 클러스터에서 Spark, Hadoop MapReduce, Hive, Pig 스크립트 등을 실행할 때, 이를 하나의 단위(스텝)로 정의하고 순차적으로(또는 병렬로) 실행할 수 있음.
EMR Step
1. 작업(잡)을 ‘스텝’ 단위로 관리
EMR 클러스터에서 수행되는 작업(예: Spark-submit, Hadoop jar, Hive 쿼리, Pig 스크립트, S3DistCp 등)을 하나의 “스텝(Step)”이라 부름.
각 스텝은 필요한 실행 파일(또는 JAR, 스크립트), 인자, 실행 옵션, 실행 시나리오 등을 담고 있음.
2. 순차 실행 vs. 병렬 실행
기본적으로 EMR은 스텝을 FIFO 방식으로 순차 실행함.
하지만 스텝 병렬화 기능을 활성화하면(배치 스텝 병렬 실행), 조건에 따라 병렬로 수행될 수도 있음.
단, 노드 리소스가 충분해야 하며, Spark/Hadoop YARN 설정 등과 결합되어야 함.
3. ActionOnFailure
스텝이 실패했을 때, EMR 전체를 종료할지(TERMINATE_CLUSTER), 해당 스텝 이후의 스텝 실행을 중단하고 대기할지(CANCEL_AND_WAIT), 아니면 그냥 넘어갈지(CONTINUE) 지정할 수 있음.
프로덕션 환경에서는 “중요 스텝이 실패할 경우 즉시 클러스터를 종료” 등의 정책을 스텝마다 달리 줄 수 있음.
4. 여러 스텝 간 의존
각 스텝은 독립적으로 실행되지만, 보통 이전 스텝이 끝나야 다음 스텝이 실행됨.
Spark 스크립트 → Hive 스크립트 등 순차 파이프라인을 구성하기 편리함.
Step의 종류
EMR은 다양한 유형의 스텝을 지원함.
내부적으로는 대부분 HadoopJarStep으로 분류되지만, 어떤 명령을 실행하느냐에 따라 역할이 달라짐.
1. Spark 스텝
command-runner.jar를 사용해 spark-submit 명령을 실행함.
{ "Name": "Spark Step Example", "ActionOnFailure": "CANCEL_AND_WAIT", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "spark-submit", "--deploy-mode", "cluster", "s3://my-bucket/my-script.py" ] } }
2. Hadoop MapReduce 스텝
MapReduce JAR 파일을 실행함.
{ "Name": "Hadoop JAR Step Example", "ActionOnFailure": "TERMINATE_CLUSTER", "HadoopJarStep": { "Jar": "s3://my-bucket/my-mapreduce-job.jar", "Args": ["arg1", "arg2"] } }
3. Hive 스텝
command-runner.jar로 hive-script 호출함.
{ "Name": "Hive Step Example", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "hive-script", "--run-hive-script", "--args", "-f", "s3://my-bucket/hive/scripts/my-query.q", "-d", "INPUT=s3://my-bucket/input" ] } }
4. Pig 스텝
command-runner.jar로 pig-script 실행함.
{ "Name": "Pig Step Example", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "pig-script", "--run-pig-script", "--args", "-f", "s3://my-bucket/pig/scripts/my-script.pig" ] } }
5. S3DistCp 스텝
대량의 데이터를 S3 간 혹은 HDFS와 S3 간 복사할 때 쓰임.
{ "Name": "S3DistCp Example", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "s3-dist-cp", "--src", "s3://my-bucket/source/", "--dest", "s3://my-bucket/destination/" ] } }
6. 임의의 스크립트/명령
command-runner.jar를 통해 Bash 명령어, Python 스크립트 등 원하는 스크립트를 실행할 수도 있음.
스텝 실행의 동작 방식
1. 클러스터 상태와의 관계
스텝을 추가할 때, 클러스터가 적절한 상태(RUNNING 혹은 WAITING 등)여야 함.
클러스터가 이미 TERMINATING, SHUTTING_DOWN 등의 상태이면 스텝 추가가 불가능함.
2. FIFO 순차 실행(기본)
신규로 추가된 스텝들은 대기(상태: PENDING) 상태가 되며, 기존 스텝이 모두 COMPLETED/SKIPPED/FAILED 등의 상태가 되어야 실행(RUNNING) 상태가 됨.
실행이 끝나면 COMPLETED(성공) 또는 FAILED(실패) 상태로 전환됨.
3. ActionOnFailure 처리
스텝이 FAILED 상태가 되었을 때, TERMINATE_CLUSTER를 설정했다면 클러스터가 즉시 종료됨.
CANCEL_AND_WAIT를 설정했다면 나머지 스텝들은 실행이 중단되지만, 클러스터는 살아있어 수동으로 명령을 기다리는 상태가 됨.
CONTINUE라면 실패 스텝은 그냥 FAILED로 기록되고, 다음 스텝이 계속 실행됨.
4. 병렬 실행(옵션)
EMR 5.28.0 이상에서 “Parallel Steps”를 지원함.
스텝을 동시에 실행하려면 StepConcurrencyLevel 등의 설정이 필요하며, YARN 리소스가 충분해야 함.
실제 스케줄링은 YARN이 담당하므로, 병렬 실행이 가능한지는 Executor, Driver 메모리 및 코어 등이 충돌 없이 배분되는지에 달려 있음.
5. 로그 / 디버깅
각 스텝은 표준 출력/에러 로그를 로그 파일로 기록함(기본적으로 /mnt/var/log/ 디렉터리 등).
클러스터 생성 시 LogUri를 지정하면 S3에 자동으로 로그가 업로드됨.
EMR 콘솔, CloudWatch Logs, S3에 저장된 로그 등을 통해 각 스텝의 실행 결과를 확인할 수 있음.
4. Step의 상태(State)와 수명 주기(Lifecycle)
- PENDING
- 스텝이 등록되었으나 실행 대기 중. 앞선 스텝이 실행 중이거나 클러스터가 대기 상태인 경우.
- RUNNING
- 스텝이 실제로 할당되어 실행되는 중.
- COMPLETED
- 스텝이 정상적으로 모든 작업을 마침.
- CANCEL_PENDING / CANCELLED
- 어떤 원인(예: 이전 스텝 실패로 “CANCEL_AND_WAIT” 설정)이 생겨 스텝이 취소됨.
- FAILED
- 스텝 실행 중 오류 발생. Spark/Hadoop job이 예외 처리되지 못하고 종료된 경우.
- INTERRUPTED
- 스텝 실행 중 클러스터가 종료되거나 강제로 스텝이 중단된 경우.
5. Step 추가(등록) 방법
- AWS Management Console
- EMR 콘솔의 “Steps” 탭에서 “Add step” 버튼을 눌러 스텝을 추가할 수 있습니다.
- CLI (aws emr add-steps)
- CLI 명령어로 스텝을 추가할 수도 있습니다. 예:
- aws emr add-steps \ --cluster-id j-XXXXXXXXXXXXX \ --steps Type=Spark,Name="Spark Step",ActionOnFailure=CONTINUE,...
- SDK (Boto3)
- Boto3의 add_job_flow_steps API를 호출하여 Python 등 코드에서 스텝을 추가합니다.
- 예:
- import boto3 client = boto3.client('emr', region_name='us-east-1') response = client.add_job_flow_steps( JobFlowId='j-XXXXXXXXXXXXX', Steps=[ { 'Name': 'MySparkStep', 'ActionOnFailure': 'CONTINUE', 'HadoopJarStep': { 'Jar': 'command-runner.jar', 'Args': [ 'spark-submit', '--deploy-mode', 'cluster', 's3://my-bucket/scripts/my_script.py' ] } } ] )
- Airflow 연동
- EmrAddStepsOperator를 사용해 Airflow DAG에서 스텝을 등록할 수 있습니다.
6. Step 베스트 프랙티스
- ActionOnFailure 설정
- 스텝의 중요도별로 CONTINUE, CANCEL_AND_WAIT, TERMINATE_CLUSTER 등을 적절히 설정합니다.
- “핵심 스텝이 실패하면 바로 클러스터 종료” 혹은 “단일 스텝 실패는 무시하고 나머지 스텝은 진행” 등 운영 정책을 분명히 해야 합니다.
- 로그 관리
- LogUri를 지정해 스텝의 stdout, stderr 로그를 S3에 저장하거나, CloudWatch Logs로 스트리밍 설정을 고려합니다.
- Spark UI(4040 포트 등)를 통해 드라이버, Executor 로그를 확인해야 할 수도 있습니다.
- 배포 후 문제 해결 시, 로그 위치를 정확히 알아야 운영이 편리해집니다.
- 스텝 병렬화
- 병렬 실행이 필요하다면, EMR 버전(5.28.0 이상)과 StepConcurrencyLevel 설정 등을 확인합니다.
- Spark / YARN / Hadoop 설정에서 Executor 메모리, 코어, 동시 실행 Task 수 등을 함께 조율해야 합니다.
- IAM 권한
- 스텝이 액세스해야 하는 S3 경로나 외부 서비스 등에 대한 IAM Role, 정책 설정이 필요합니다(EMR Cluster EC2 Instance Profile, EMR Service Role, EMRFS Role 등).
- add_job_flow_steps API를 호출하는 주체(사용자, 애플리케이션, Airflow 등) 역시 충분한 권한이 있어야 합니다.
- 클러스터 정책
- Ephemeral(에페멀) 클러스터: 스텝을 모두 실행한 후 자동/수동으로 클러스터 종료. 불필요한 비용 낭비 방지.
- Persistent(상시) 클러스터: 여러 파이프라인이 동시에 스텝을 추가해 사용. 생성 시간을 절약하지만, 항상 리소스가 동원되므로 비용 고려 필요.
- 체크포인트
- Spark/Hadoop 작업이 중간 상태를 저장(Checkpoint)하거나 S3를 통해 중간 데이터를 보존하는 방식을 사용하면, 스텝 재실행 시 중단된 구간에서 재개할 수 있습니다.
- EMR 스텝 자체에는 재시작 기능이 없으므로, 작업 레벨에서 재처리를 고려해야 합니다.
- 작업 모니터링
- Step State Machine을 외부에서 모니터링(예: Airflow EmrStepSensor, CI/CD 파이프라인, Alert 등)하여 실패 시 알림을 받고, 재시도 로직을 구현합니다.
- 스텝이 FAILED로 끝나면 로그와 Spark UI를 통해 원인을 찾아야 합니다.
7. 종합 정리
- EMR 스텝은 EMR 클러스터에서 실행되는 배치 태스크(잡)의 논리적 단위로, Spark/Hadoop/Hive/Pig 등을 실행하는 핵심 방법입니다.
- 각 스텝은 HadoopJarStep 구조를 가지며, command-runner.jar를 통해 실제 스크립트나 명령어를 실행합니다.
- 기본적으로는 FIFO 순차 실행이지만, EMR 설정에 따라 병렬화도 가능합니다.
- 스텝별로 실패 시 동작을 설정할 수 있어, 복잡한 데이터 파이프라인 시나리오(여러 스텝 간 의존 관계, 일부 스텝 실패 시 클러스터 종료 등)를 유연하게 구성할 수 있습니다.
- 대규모 Spark/Hadoop 환경 운영 시에는 스텝 로그, 클러스터 자원 설정, IAM 권한, 병렬화 옵션 등을 종합적으로 고려해 안정성과 효율성을 높이는 것이 중요합니다.
이처럼 EMR 스텝을 적절히 활용하면, 분산 데이터 처리를 위한 Spark/Hadoop 워크플로우를 자동화하고, 단계별로 실행 및 모니터링하는 체계를 확립할 수 있습니다.
'Data Engineering > Airflow' 카테고리의 다른 글
[Airflow] Airflow를 통해 EMR에 Pyspark 여러개 실행하는 방법 (1) | 2025.04.04 |
---|---|
[Airflow] EmrAddStepsOperator 개념 (0) | 2025.04.04 |
[Airflow] 컴포넌트, MWAA (0) | 2024.05.15 |
[Airflow] 에어플로우 DAG란? (0) | 2023.04.02 |
[Airflow] 데이터 파이프라인이란? (0) | 2023.01.09 |
EMR에서 Step의 개념
아마존 EMR(Amazon Elastic MapReduce)에서 Step은 클러스터 상에서 수행되는 작업(잡, 태스크) 단위를 추상화한 개념임.
EMR 클러스터에서 Spark, Hadoop MapReduce, Hive, Pig 스크립트 등을 실행할 때, 이를 하나의 단위(스텝)로 정의하고 순차적으로(또는 병렬로) 실행할 수 있음.
EMR Step
1. 작업(잡)을 ‘스텝’ 단위로 관리
EMR 클러스터에서 수행되는 작업(예: Spark-submit, Hadoop jar, Hive 쿼리, Pig 스크립트, S3DistCp 등)을 하나의 “스텝(Step)”이라 부름.
각 스텝은 필요한 실행 파일(또는 JAR, 스크립트), 인자, 실행 옵션, 실행 시나리오 등을 담고 있음.
2. 순차 실행 vs. 병렬 실행
기본적으로 EMR은 스텝을 FIFO 방식으로 순차 실행함.
하지만 스텝 병렬화 기능을 활성화하면(배치 스텝 병렬 실행), 조건에 따라 병렬로 수행될 수도 있음.
단, 노드 리소스가 충분해야 하며, Spark/Hadoop YARN 설정 등과 결합되어야 함.
3. ActionOnFailure
스텝이 실패했을 때, EMR 전체를 종료할지(TERMINATE_CLUSTER), 해당 스텝 이후의 스텝 실행을 중단하고 대기할지(CANCEL_AND_WAIT), 아니면 그냥 넘어갈지(CONTINUE) 지정할 수 있음.
프로덕션 환경에서는 “중요 스텝이 실패할 경우 즉시 클러스터를 종료” 등의 정책을 스텝마다 달리 줄 수 있음.
4. 여러 스텝 간 의존
각 스텝은 독립적으로 실행되지만, 보통 이전 스텝이 끝나야 다음 스텝이 실행됨.
Spark 스크립트 → Hive 스크립트 등 순차 파이프라인을 구성하기 편리함.
Step의 종류
EMR은 다양한 유형의 스텝을 지원함.
내부적으로는 대부분 HadoopJarStep으로 분류되지만, 어떤 명령을 실행하느냐에 따라 역할이 달라짐.
1. Spark 스텝
command-runner.jar를 사용해 spark-submit 명령을 실행함.
{ "Name": "Spark Step Example", "ActionOnFailure": "CANCEL_AND_WAIT", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "spark-submit", "--deploy-mode", "cluster", "s3://my-bucket/my-script.py" ] } }
2. Hadoop MapReduce 스텝
MapReduce JAR 파일을 실행함.
{ "Name": "Hadoop JAR Step Example", "ActionOnFailure": "TERMINATE_CLUSTER", "HadoopJarStep": { "Jar": "s3://my-bucket/my-mapreduce-job.jar", "Args": ["arg1", "arg2"] } }
3. Hive 스텝
command-runner.jar로 hive-script 호출함.
{ "Name": "Hive Step Example", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "hive-script", "--run-hive-script", "--args", "-f", "s3://my-bucket/hive/scripts/my-query.q", "-d", "INPUT=s3://my-bucket/input" ] } }
4. Pig 스텝
command-runner.jar로 pig-script 실행함.
{ "Name": "Pig Step Example", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "pig-script", "--run-pig-script", "--args", "-f", "s3://my-bucket/pig/scripts/my-script.pig" ] } }
5. S3DistCp 스텝
대량의 데이터를 S3 간 혹은 HDFS와 S3 간 복사할 때 쓰임.
{ "Name": "S3DistCp Example", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "s3-dist-cp", "--src", "s3://my-bucket/source/", "--dest", "s3://my-bucket/destination/" ] } }
6. 임의의 스크립트/명령
command-runner.jar를 통해 Bash 명령어, Python 스크립트 등 원하는 스크립트를 실행할 수도 있음.
스텝 실행의 동작 방식
1. 클러스터 상태와의 관계
스텝을 추가할 때, 클러스터가 적절한 상태(RUNNING 혹은 WAITING 등)여야 함.
클러스터가 이미 TERMINATING, SHUTTING_DOWN 등의 상태이면 스텝 추가가 불가능함.
2. FIFO 순차 실행(기본)
신규로 추가된 스텝들은 대기(상태: PENDING) 상태가 되며, 기존 스텝이 모두 COMPLETED/SKIPPED/FAILED 등의 상태가 되어야 실행(RUNNING) 상태가 됨.
실행이 끝나면 COMPLETED(성공) 또는 FAILED(실패) 상태로 전환됨.
3. ActionOnFailure 처리
스텝이 FAILED 상태가 되었을 때, TERMINATE_CLUSTER를 설정했다면 클러스터가 즉시 종료됨.
CANCEL_AND_WAIT를 설정했다면 나머지 스텝들은 실행이 중단되지만, 클러스터는 살아있어 수동으로 명령을 기다리는 상태가 됨.
CONTINUE라면 실패 스텝은 그냥 FAILED로 기록되고, 다음 스텝이 계속 실행됨.
4. 병렬 실행(옵션)
EMR 5.28.0 이상에서 “Parallel Steps”를 지원함.
스텝을 동시에 실행하려면 StepConcurrencyLevel 등의 설정이 필요하며, YARN 리소스가 충분해야 함.
실제 스케줄링은 YARN이 담당하므로, 병렬 실행이 가능한지는 Executor, Driver 메모리 및 코어 등이 충돌 없이 배분되는지에 달려 있음.
5. 로그 / 디버깅
각 스텝은 표준 출력/에러 로그를 로그 파일로 기록함(기본적으로 /mnt/var/log/ 디렉터리 등).
클러스터 생성 시 LogUri를 지정하면 S3에 자동으로 로그가 업로드됨.
EMR 콘솔, CloudWatch Logs, S3에 저장된 로그 등을 통해 각 스텝의 실행 결과를 확인할 수 있음.
4. Step의 상태(State)와 수명 주기(Lifecycle)
- PENDING
- 스텝이 등록되었으나 실행 대기 중. 앞선 스텝이 실행 중이거나 클러스터가 대기 상태인 경우.
- RUNNING
- 스텝이 실제로 할당되어 실행되는 중.
- COMPLETED
- 스텝이 정상적으로 모든 작업을 마침.
- CANCEL_PENDING / CANCELLED
- 어떤 원인(예: 이전 스텝 실패로 “CANCEL_AND_WAIT” 설정)이 생겨 스텝이 취소됨.
- FAILED
- 스텝 실행 중 오류 발생. Spark/Hadoop job이 예외 처리되지 못하고 종료된 경우.
- INTERRUPTED
- 스텝 실행 중 클러스터가 종료되거나 강제로 스텝이 중단된 경우.
5. Step 추가(등록) 방법
- AWS Management Console
- EMR 콘솔의 “Steps” 탭에서 “Add step” 버튼을 눌러 스텝을 추가할 수 있습니다.
- CLI (aws emr add-steps)
- CLI 명령어로 스텝을 추가할 수도 있습니다. 예:
- aws emr add-steps \ --cluster-id j-XXXXXXXXXXXXX \ --steps Type=Spark,Name="Spark Step",ActionOnFailure=CONTINUE,...
- SDK (Boto3)
- Boto3의 add_job_flow_steps API를 호출하여 Python 등 코드에서 스텝을 추가합니다.
- 예:
- import boto3 client = boto3.client('emr', region_name='us-east-1') response = client.add_job_flow_steps( JobFlowId='j-XXXXXXXXXXXXX', Steps=[ { 'Name': 'MySparkStep', 'ActionOnFailure': 'CONTINUE', 'HadoopJarStep': { 'Jar': 'command-runner.jar', 'Args': [ 'spark-submit', '--deploy-mode', 'cluster', 's3://my-bucket/scripts/my_script.py' ] } } ] )
- Airflow 연동
- EmrAddStepsOperator를 사용해 Airflow DAG에서 스텝을 등록할 수 있습니다.
6. Step 베스트 프랙티스
- ActionOnFailure 설정
- 스텝의 중요도별로 CONTINUE, CANCEL_AND_WAIT, TERMINATE_CLUSTER 등을 적절히 설정합니다.
- “핵심 스텝이 실패하면 바로 클러스터 종료” 혹은 “단일 스텝 실패는 무시하고 나머지 스텝은 진행” 등 운영 정책을 분명히 해야 합니다.
- 로그 관리
- LogUri를 지정해 스텝의 stdout, stderr 로그를 S3에 저장하거나, CloudWatch Logs로 스트리밍 설정을 고려합니다.
- Spark UI(4040 포트 등)를 통해 드라이버, Executor 로그를 확인해야 할 수도 있습니다.
- 배포 후 문제 해결 시, 로그 위치를 정확히 알아야 운영이 편리해집니다.
- 스텝 병렬화
- 병렬 실행이 필요하다면, EMR 버전(5.28.0 이상)과 StepConcurrencyLevel 설정 등을 확인합니다.
- Spark / YARN / Hadoop 설정에서 Executor 메모리, 코어, 동시 실행 Task 수 등을 함께 조율해야 합니다.
- IAM 권한
- 스텝이 액세스해야 하는 S3 경로나 외부 서비스 등에 대한 IAM Role, 정책 설정이 필요합니다(EMR Cluster EC2 Instance Profile, EMR Service Role, EMRFS Role 등).
- add_job_flow_steps API를 호출하는 주체(사용자, 애플리케이션, Airflow 등) 역시 충분한 권한이 있어야 합니다.
- 클러스터 정책
- Ephemeral(에페멀) 클러스터: 스텝을 모두 실행한 후 자동/수동으로 클러스터 종료. 불필요한 비용 낭비 방지.
- Persistent(상시) 클러스터: 여러 파이프라인이 동시에 스텝을 추가해 사용. 생성 시간을 절약하지만, 항상 리소스가 동원되므로 비용 고려 필요.
- 체크포인트
- Spark/Hadoop 작업이 중간 상태를 저장(Checkpoint)하거나 S3를 통해 중간 데이터를 보존하는 방식을 사용하면, 스텝 재실행 시 중단된 구간에서 재개할 수 있습니다.
- EMR 스텝 자체에는 재시작 기능이 없으므로, 작업 레벨에서 재처리를 고려해야 합니다.
- 작업 모니터링
- Step State Machine을 외부에서 모니터링(예: Airflow EmrStepSensor, CI/CD 파이프라인, Alert 등)하여 실패 시 알림을 받고, 재시도 로직을 구현합니다.
- 스텝이 FAILED로 끝나면 로그와 Spark UI를 통해 원인을 찾아야 합니다.
7. 종합 정리
- EMR 스텝은 EMR 클러스터에서 실행되는 배치 태스크(잡)의 논리적 단위로, Spark/Hadoop/Hive/Pig 등을 실행하는 핵심 방법입니다.
- 각 스텝은 HadoopJarStep 구조를 가지며, command-runner.jar를 통해 실제 스크립트나 명령어를 실행합니다.
- 기본적으로는 FIFO 순차 실행이지만, EMR 설정에 따라 병렬화도 가능합니다.
- 스텝별로 실패 시 동작을 설정할 수 있어, 복잡한 데이터 파이프라인 시나리오(여러 스텝 간 의존 관계, 일부 스텝 실패 시 클러스터 종료 등)를 유연하게 구성할 수 있습니다.
- 대규모 Spark/Hadoop 환경 운영 시에는 스텝 로그, 클러스터 자원 설정, IAM 권한, 병렬화 옵션 등을 종합적으로 고려해 안정성과 효율성을 높이는 것이 중요합니다.
이처럼 EMR 스텝을 적절히 활용하면, 분산 데이터 처리를 위한 Spark/Hadoop 워크플로우를 자동화하고, 단계별로 실행 및 모니터링하는 체계를 확립할 수 있습니다.
'Data Engineering > Airflow' 카테고리의 다른 글
[Airflow] Airflow를 통해 EMR에 Pyspark 여러개 실행하는 방법 (1) | 2025.04.04 |
---|---|
[Airflow] EmrAddStepsOperator 개념 (0) | 2025.04.04 |
[Airflow] 컴포넌트, MWAA (0) | 2024.05.15 |
[Airflow] 에어플로우 DAG란? (0) | 2023.04.02 |
[Airflow] 데이터 파이프라인이란? (0) | 2023.01.09 |