You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark中Hadoop S3配置覆盖冲突:写入MinIO实例错误

问题:Spark跨MinIO实例写入时错误指向第一个实例

MinIO部署配置

使用Docker Compose部署两个独立的MinIO实例,配置如下:

version: "3.9"
services:
  minio:
    image: quay.io/minio/minio:latest
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: "user"
      MINIO_ROOT_PASSWORD: "pwd"
    volumes:
      - ./data/minio:/data # 持久化存储数据
    command: server /data --console-address ":9001"

  minio2:
    image: quay.io/minio/minio:latest
    ports:
      - "9002:9000"
      - "9003:9001"
    environment:
      MINIO_ROOT_USER: "user2"
      MINIO_ROOT_PASSWORD: "pwd2"
    volumes:
      - ./data/minio2:/data # 持久化存储数据
    command: server /data --console-address ":9001"

Spark Scala代码

尝试从第一个MinIO读取CSV文件并写入第二个MinIO的代码如下:

import org.apache.spark.sql.SparkSession

object Main extends App {

  // 初始化SparkSession
  val spark = SparkSession
    .builder()
    .appName("O2SS_SparkServer")
    .master("local[*]")
    .config("spark.ui.port", "4040")
    .getOrCreate()
  spark.sparkContext.setLogLevel("WARN")

  // 从第一个MinIO读取CSV
  val endpoint  = "http://127.0.0.1:9000"
  val accessKey = "user"
  val secretKey = "pwd"
  val bucket    = "test_bucket"
  spark.sparkContext.hadoopConfiguration.set(s"fs.s3a.bucket.$bucket.endpoint", endpoint)
  spark.sparkContext.hadoopConfiguration.set(s"fs.s3a.bucket.$bucket.access.key", accessKey)
  spark.sparkContext.hadoopConfiguration.set(s"fs.s3a.bucket.$bucket.secret.key", secretKey)
  val input     = spark.read.csv(s"s3a://$bucket/<someFile>.csv")

  // 写入第二个MinIO
  val endpoint2  = "http://127.0.0.1:9002"
  val accessKey2 = "user2"
  val secretKey2 = "pwd2"
  val bucket2    = "test_bucket"
  spark.sparkContext.hadoopConfiguration.set(s"fs.s3a.bucket.$bucket2.endpoint", endpoint2)
  spark.sparkContext.hadoopConfiguration.set(s"fs.s3a.bucket.$bucket2.access.key", accessKey2)
  spark.sparkContext.hadoopConfiguration.set(s"fs.s3a.bucket.$bucket2.secret.key", secretKey2)
  input.write.parquet(s"s3a://$bucket2/IfNotInS3_2_THENBUG.parquet")

}

问题现象

执行上述代码后,数据并未写入第二个MinIO实例,而是错误地写入了第一个MinIO实例。

备注

  • 已知按Bucket配置的机制以及S3 Bucket命名唯一性规则,在S3中不会出现此问题,此点无需讨论
  • 当前使用Spark 3.3.1版本

内容的提问来源于stack exchange,提问作者James JIANG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:25:17