【问题标题】:AWS EKS Spark 3.0, Hadoop 3.2 Error - NoClassDefFoundError: com/amazonaws/services/s3/model/MultiObjectDeleteExceptionAWS EKS Spark 3.0、Hadoop 3.2 错误 - NoClassDefFoundError: com/amazonaws/services/s3/model/MultiObjectDeleteException
【发布时间】:2021-02-13 21:41:14
【问题描述】:

我在 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

我正在使用以下版本 -

  • APACHE_SPARK_VERSION=3.0.1
  • HADOOP_VERSION=3.2
  • aws-java-sdk-1.11.890
  • hadoop-aws-3.2.0
  • Python 3.7.3

我也测试了不同的版本。

  • aws-java-sdk-1.11.563.jar

如果有人遇到此问题,请帮助提供解决方案。

PS:这也不是 IAM 政策错误,因为 IAM 政策非常好。

【问题讨论】:

    标签: apache-spark hadoop amazon-s3 amazon-eks


    【解决方案1】:

    最后所有的问题都用下面的 jars 解决了 -

    任何尝试使用 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()
    

    【讨论】:

    • 在所有解决方案和 StackOverflow 帖子中,这是唯一可行的解​​决方案。请接受这个作为答案!
    • 谢谢@SathyasarathiGunasekaran。如果你想使用 Spark 3.2.0 下面是我测试成功的版本 - ENV APACHE_SPARK_VERSION 3.2.0 ENV HADOOP_VERSION 3.2 ENV HADOOP_AWS_JAR_VERSION 3.3.1 ENV AWS_JAVA_SDK_VERSION 1.12.65
    【解决方案2】:

    可以通过以下方式查看此博客 (https://medium.com/swlh/how-to-perform-a-spark-submit-to-amazon-eks-cluster-with-irsa-50af9b26cae):

    • Spark 2.4.4
    • Hadoop 2.7.3
    • AWS 开发工具包 1.11.834

    示例 spark-submit 是

    /opt/spark/bin/spark-submit \
        --master=k8s://https://4A5<i_am_tu>545E6.sk1.ap-southeast-1.eks.amazonaws.com \
        --deploy-mode cluster \
        --name spark-pi \
        --class org.apache.spark.examples.SparkPi \
        --conf spark.kubernetes.driver.pod.name=spark-pi-driver \
        --conf spark.kubernetes.container.image=vitamingaugau/spark:spark-2.4.4-irsa \
        --conf spark.kubernetes.namespace=spark-pi \
        --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark-pi \
        --conf spark.kubernetes.authenticate.executor.serviceAccountName=spark-pi \
        --conf spark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.WebIdentityTokenCredentialsProvider \
        --conf spark.kubernetes.authenticate.submission.caCertFile=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
        --conf spark.kubernetes.authenticate.submission.oauthTokenFile=/var/run/secrets/kubernetes.io/serviceaccount/token \
        local:///opt/spark/examples/target/scala-2.11/jars/spark-examples_2.11-2.4.4.jar 20000
    

    【讨论】:

      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2019-11-25
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多