首页 > 解决方案 > Spark 从 s3 读取数据:如何为 Spark 上下文正确配置“fs.s3a.multipart.size”?

问题描述

我正在创建一个 Spark 作业以从 AWS3 服务器读取数据。这是创建和配置 Spark Session 和 Spark Context 的代码:

spark = SparkSession.builder.appName("mongopipeline").master("local") .config("spark.executor.memory","1g") .config("spark.mongodb.input.uri","mongodb://yourway:yourway2020@13.212.171.210:27017/yourway.job_description?authSource=admin")

.config("spark.executor.extraJavaOptions","-Dcom.amazonaws.services.s3.enableV4=true")

.config("spark.driver.extraJavaOptions","-Dcom.amazonaws.services.s3.enableV4=true")

.getOrCreate()

spark_context = spark.sparkContext

spark_context._jsc.hadoopConfiguration().set("fs.s3a.access.key", "XXXX") spark_context._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "XXXX") spark_context._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")

然后我得到一个错误:: java.lang.NumberFormatException: For input string: "100M"

我搜索了这个问题,发现这是由 config 的值引起的"fs.s3a.multipart.size",默认为“100M”。因此,我又添加了一行代码,即:

spark_context._jsc.hadoopConfiguration().set("fs.s3a.multipart.size", "104857600")

但是,我得到了另一个错误:java.lang.IllegalArgumentException,这可能是由添加的配置引起的。那么我该如何"fs.s3a.multipart.size"正确设置呢?

更多信息:

蟒蛇3.9.2;火花3.1.1;斯卡拉 2.12.13; aws-java-sdk 1.7.4;hadoop-aws 2.7.1

火花提交cmd:spark-submit --packages com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.1 /path/to/file/main.py

操作系统:macOS BigSur 11.2.3

非常感谢!

标签: amazon-web-servicesapache-sparkhadoop

解决方案


问题是我没有安装hadoop和spark,我想设置的参数属于hadoop的配置。

安装 spark-3.1.1-bin-hadoop2.7 后,我在此文件夹中打开终端并成功运行 spark-submit 命令。

关于安装spark-3.1.1-bin-hadoop2.7的步骤,可以访问: https ://www.tutorialspoint.com/pyspark/pyspark_environment_setup.htm


推荐阅读