我正在尝试在 kubernetes 上运行 Spark 应用程序,然后该应用程序将在小型 YARN 集群上运行,但还没有那么远。
我通过 configmap 中的配置文件配置 Spark
Spark 应用程序应使用 AWS S3 存储桶作为默认 FS。
在 kubernetes 部署中,我使用指向角色 ARN 的服务帐户
当我看到以下环境变量时,部署进展顺利:
AWS_DEFAULT_REGION=.....
AWS_REGION=.....
AWS_ROLE_ARN=......
AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
AWS_STS_REGIONAL_ENDPOINTS=regional
现在,我希望 Spark 使用存储在文件中的会话令牌和角色名称
我正在使用
TemporaryCredentialsProvider
但我找不到传递会话令牌的方法,我正在尝试:spark.hadoop.fs.s3a.aws.credentials.provider: org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider spark.hadoop.fs.s3a.session.token.file: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
No AWS Credentials provided by TemporaryAWSCredentialsProvider : org.apache.hadoop.fs.s3a.CredentialInitializationException: Access key, secret key or session token is unset
尝试使用 WebIdentityTokenCredentialsProvider 进行链接。
WebIdentityTokenCredentialsProvider awsCredentialProvider = WebIdentityTokenCredentialsProvider.builder()
.roleArn(System.getenv("AWS_ROLE_ARN"))
.roleSessionName(System.getenv("AWS_ROLE_SESSION_NAME"))
.webIdentityTokenFile(System.getenv("AWS_WEB_IDENTITY_TOKEN_FILE"))
.build();