amazon-web-services - 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
非常感谢!
解决方案
问题是我没有安装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
推荐阅读
- reactjs - 如何将反应应用程序保存为 html?
- sql - 使用一个表中的数据过滤第二个表而不连接
- rust - 如何在 Rust 中使不可变变量指向可变数据
- vuejs3 - 如何在 Vue.js 组合 API 中枚举“反应式”的键?
- php - MySQL 通过子选择变量过滤 WHERE
- c# - 使用动态数据在 C# 中向 DataTable 添加行和列?
- swift - 如何在 SwiftUI 的 UI 测试中获取 EnvironmentObject/Publishers
- git - 有没有办法将特定分支的默认配置设置为 --no-ff
- python - 将 csv 文件列作为参数
- apple-push-notifications - .p12 选项不可用