[AWS]EMR(spark) Job 실행하기
EMR on EKS : spark job submit
S3 -> EMR(spark) -> S3
1. cluster 정보 확인
aws emr-containers list-virtual-clusters
2. 기본적인 정보 등록
export EMR_EKS_CLUSTER_ID=<virtual-cluster-id>
export EMR_EKS_EXECUTION_ARN=<arn\:aws\:iam::xxxxx\:role/EMR_EKS_Job_Execution_Role>
export S3_BUCKET=<S3Bucket>
-> role에는 이전에 emr on eks 세팅할 때 만들었던 role 정보(EMRContainers-JobExecutionRole)를 입력
-> S3 bucket은 필수정보는 아닌듯하다. 작업을 위한 pyspark파일이 담긴 s3 경로인 것이다.
3. pyspark 코드를 입력해서 위의 s3 버킷에등록
예시코드
import sys
from random import random
from operator import add
from pyspark.sql import SparkSession
if __name__ == "__main__":
spark = SparkSession\
.builder\
.appName("PythonPi")\
.getOrCreate()
df = spark.read.csv("가공할 데이터가 담긴 S3 버킷 path")
df.write.option("header", "true").csv("가공된 데이터가 저장될 S3 버킷 path")
spark.stop()
4. job submit
aws emr-containers start-job-run \
--virtual-cluster-id ${EMR_EKS_CLUSTER_ID} \
--name spark-pi \
--execution-role-arn ${EMR_EKS_EXECUTION_ARN} \
--release-label emr-6.2.0-latest \
--job-driver '{
"sparkSubmitJobDriver": {
"entryPoint": ${S3Bucket},
"sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1"
}
}'
5. 제출된 job 확인
a. 실패한 job(failed 상태) error log 확인
aws emr-containers describe-job-run --virtual-cluster-id cluster-id --id job-run-id
아래와 같은 메시지를 통해 에러 원인 파악 및 해결 가능
b. 성공한 job : running => completed 상태
aws emr on eks 콘솔에서 위와 같이 running 상태로 확인된 job은 eks에서도 pod로 생성되어서 실행되고 아래처럼 확인 가능함
실행이 완료되어서 completed 상태가 된 job은 다시 pod에서도 내려감.
그리고 아래같이 s3에 내가 지정한 path, bucket에 파일이 생성된 것을 확인할 수 있음.
6. 주요 명령어
a. 실행되고 있는 잡 확인
aws emr-containers list-job-runs --virtual-cluster-id <cluster-id>
b. 잡 자세하게 보기
aws emr-containers describe-job-run --virtual-cluster-id cluster-id --id job-run-id
c. 잡 실행 취소
aws emr-containers cancel-job-run --virtual-cluster-id cluster-id --id job-run-id
7. 로그 보기
- 로그 웹 ui 보기
-> submiitted 상태에서는 view logs가 안된다. 상태가 결정되고 나서 해당 버튼을 누르면 private cluster더라도 로그는 웹 ui를 제공하는 듯 하다.
참고자료
https://catalog.us-east-1.prod.workshops.aws/workshops/1f91e1d4-5587-40ff-8d5d-54fc86e0ddc1/en-US
https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/getting-started.html
https://programmer.ink/think/create-and-run-an-emr-on-eks-cluster.html
https://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-spark-s3select.html
https://www.youtube.com/watch?v=2UMz72NRZss&list=PLUe6KRx8LhLpJ8CyNHewFYukWm7sQyQrM&index=1