Pra*_*bey 3 hadoop amazon-s3 apache-spark amazon-eks
我在 EKS 上运行 Jupyterhub,并希望利用 EKS IRSA 功能在 K8s 上运行 Spark 工作负载。我之前有使用 Kube2IAM 的经验,但现在我计划转向 IRSA。
此错误不是由于 IRSA 造成的,因为服务帐户已完美附加到 Driver 和 Executor Pod,并且我可以通过 CLI 和 SDK 从两者访问 S3。此问题与在 Spark 3.0/ Hadoop 3.2 上使用 Spark 访问 S3 有关
Py4JJavaError:调用 None.org.apache.spark.api.java.JavaSparkContext 时发生错误。:java.lang.NoClassDefFoundError:com/amazonaws/services/s3/model/MultiObjectDeleteException
我正在使用以下版本 -
我也用不同的版本进行了测试。
如果有人遇到过这个问题,请帮忙提供解决方案。
PS:这也不是 IAM 策略错误,因为 IAM 策略完全没问题。
最后所有问题都通过下面的罐子解决了 -
任何尝试使用 IRSA 在 EKS 上运行 Spark 的人,这是正确的 Spark 配置 -
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("pyspark-data-analysis-1") \
.config("spark.kubernetes.driver.master","k8s://https://xxxxxx.gr7.ap-southeast-1.eks.amazonaws.com:443") \
.config("spark.kubernetes.namespace", "jupyter") \
.config("spark.kubernetes.container.image", "xxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/spark-ubuntu-3.0.1") \
.config("spark.kubernetes.container.image.pullPolicy" ,"Always") \
.config("spark.kubernetes.authenticate.driver.serviceAccountName", "spark") \
.config("spark.kubernetes.authenticate.executor.serviceAccountName", "spark") \
.config("spark.kubernetes.executor.annotation.eks.amazonaws.com/role-arn","arn:aws:iam::xxxxxx:role/spark-irsa") \
.config("spark.hadoop.fs.s3a.aws.credentials.provider", "com.amazonaws.auth.WebIdentityTokenCredentialsProvider") \
.config("spark.kubernetes.authenticate.submission.caCertFile", "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt") \
.config("spark.kubernetes.authenticate.submission.oauthTokenFile", "/var/run/secrets/kubernetes.io/serviceaccount/token") \
.config("spark.hadoop.fs.s3a.multiobjectdelete.enable", "false") \
.config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \
.config("spark.hadoop.fs.s3a.fast.upload","true") \
.config("spark.executor.instances", "1") \
.config("spark.executor.cores", "3") \
.config("spark.executor.memory", "10g") \
.getOrCreate()
Run Code Online (Sandbox Code Playgroud)