gpt4 book ai didi

java - 如何使用 Spark 3.0.0 读写 S3?

转载 作者:行者123 更新时间:2023-12-04 09:22:30 24 4
gpt4 key购买 nike

我正在尝试启动一个应该能够读取和写入 S3 的 Spark 应用程序,使用 Kubernetes 上的 Spark Operator 和 pySpark 版本 3.0.0。 Spark Operator 运行良好,但我很快意识到启动的应用程序无法从 S3 正确读取文件。

这个命令:

spark.read.json("s3a://bucket/path/to/data.json")

抛出这个异常:

py4j.protocol.Py4JJavaError: An error occurred while calling o58.json.
java.lang.RuntimeException: java.lang.ClassNotFoundException:
Class org.apache.hadoop.fs.s3a.S3AFileSystem not found

我首先尝试使用 gcr.io/spark-operator/spark-py:v3.0.0 作为 Spark 图像,然后尝试向其中添加一些 .jars没有成功:

ADD https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.9/httpclient-4.5.9.jar $SPARK_HOME/jars
ADD https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.7.4/hadoop-aws-2.7.4.jar $SPARK_HOME/jars
ADD https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk/1.7.4/aws-java-sdk-1.7.4.jar $SPARK_HOME/jars

这是我的 spark session :

    "spark.hadoop.fs.s3a.endpoint": "S3A_ENDPOINT"
"spark.hadoop.fs.s3a.access.key": "ACCESS_KEY"
"spark.hadoop.fs.s3a.secret.key": "SECRET_KEY"
"spark.hadoop.fs.s3a.connection.ssl.enabled": "false"
"spark.hadoop.fs.s3a.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem"
"spark.hadoop.fs.s3a.path.style.access": "true"
"spark.driver.extraClassPath": "/opt/spark/jars/*"
"spark.executor.extraClassPath": "/opt/spark/jars/*"

我的 $SPARK_HOME/opt/spark

是否有人能够使用 Spark 3.0.0 从 S3 读取/写入?这是 pyspark 的唯一问题吗?我怎样才能解决这个问题?提前致谢!

最佳答案

我想出了怎么做:这是我对基本 docker 图像所做的更改的分支(只有几处更改):

https://github.com/Coqueiro/spark/tree/branch-3.0-s3我创建了一个 Makefile 来帮助创建分发,但我基本上只是遵循了官方文档:

http://spark.apache.org/docs/latest/building-spark.html

此外,这是已经构建并推送到 Docker Hub 的图像: https://hub.docker.com/repository/docker/coqueirotree/spark-py

它支持 Spark 3.0.0、Hadoop 3.2.0、S3A 和 Kubernetes。

关于java - 如何使用 Spark 3.0.0 读写 S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63075293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com