AWS EMR step을 이용한 Spark Batch 작업

AWS EMR은 특정 작업을 등록할 수 있는 step 이라는 기능을 제공합니다. 예를 들어 매일 새벽에 클러스터에서 돌려야하는 Batch 작업이 있다면 step과 스케줄러를 통해 쉽게 해결할 수 있습니다.

EMR Step

Step은 AWS console 내에서 추가해도 되지만, AWS-Cli를 이용해서 등록해보도록 하겠습니다. AWS-Cli로 등록하면 이후에 스크립트로 활용할 수도 있다는 편리함이 있습니다.

AWS EMR step을 등록하는 방법은 아래와 같습니다. 가독성을 위해 줄바꿈, 띄어쓰기를 했지만 실제로 등록할 때는 전부 붙이셔야 합니다.

$ aws emr add-steps
    --cluster-id $CLUSTERID,
    --steps Name=$JOBNAME,
    Jar=$JARFILE,
    Args=[
        /usr/lib/spark/bin/spark-submit,
        --deploy-mode,client,
        --properties-file,/etc/spark/conf/spark-defaults.conf,
        --conf,spark.yarn.executor.memoryOverhead=2048,
        --conf,spark.executor.memory=4g,
        --packages,$SPARK_PACKAGES
    ],
    ActionOnFailure=${ACTION_ON_FAIL}'

Spark 작업 실행은 Spark-submit을 이용하여 클라이언트에 배포하는 형식입니다. 이를 위해 jar 파일이 클라이언트의 로컬 경로에 포함되어 있어야 합니다. ActionOnFailure를 통해 실패 시 Terminate, Stop 등의 옵션을 지정할 수 있습니다.

만약 등록한 작업을 취소하고 싶다면, cancel-steps를 이용하시면 됩니다.

$ aws emr cancel-steps ...

Spark 작업이 주기적으로 실행되어야 한다면, 가장 간단한 방법은 위의 EMR step 등록 스크립트를 crontab으로 등록하는 것 입니다. 만약 작업이 다양하고 복잡하다면, AWS Data Pipeline 이라는 제품을 고려해보는 것도 방법입니다. https://aws.amazon.com/ko/datapipeline/details/

Reference