본문 바로가기

Programming/Tip&Informaion

[Spark] spark history server 띄울 때, iam 권한으로 s3 읽기

emr on eks를 적용하면 spark history server를 사용하고 싶은데, ec2의 주소로 접근이 어려워서 직접 띄우기로 하였다.

 

event log 설정과 docker를 활용한 띄우기는 아래 글들을 참고하여서 로컬에서 테스트는 잘 진행했다.

 

https://aws.github.io/aws-emr-containers-best-practices/troubleshooting/docs/self-hosted-shs/

 

Self Hosted SHS - EMR Containers Best Practices Guides

Self Hosted Spark History Server In this section, you will learn how to self host Spark History Server instead of using the Persistent App UI on the AWS Console. In your StartJobRun call for EMR on EKS, set the following conf. to point to an S3 bucket wher

aws.github.io

https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui-history.html

 

Launching the Spark history server - AWS Glue

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

추가로,

 

1. docker를 이용해 직접 띄우기 보다 eks 클러스터를 이용해 띄우기

2. access_key, secret_key 대신에 iam role 활용하기

위 2개를 달성하고자 하였다.

 

1번은 deployment와 service account를 생성하고 deployment에 serviceAccountName 값을 설정해서 띄웠는데, 막상 event-log 경로를 읽으려 하니 아무 내역도 나오지 않았다.

pod에 접근해서 s3 접근을 해도 잘 되는 걸 보면 설정은 된 것 같은데 이상했다..

 

며칠 간 헤매다가 아래 글을 발견하여 해결했다.


env에 SPARK_HISTORY_OPTS 를 설정하는데
-Dspark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.WebIdentityTokenCredentialsProvider 값을 추가로 줘야 한다.

-Dspark.history.fs.logDirectory=s3a://my-bucket/event-logs/ -Dspark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.WebIdentityTokenCredentialsProvider

 

https://github.com/bbenzikry/spark-eks/issues/1

 

S3 Access Denied in Spark History Server · Issue #1 · bbenzikry/spark-eks

Hi @bbenzikry, I am trying to setup the spark-history-server using the link you have provided and the values similar to what you have suggested in flux folder. I am using S3 bucket and IRSA (IAM Ro...

github.com