spark读写minio文件代码实践

本文介绍了如何使用Minion作为对象存储方案与Spark集成,包括部署Minio服务、配置SparkSession以访问Minio,以及通过S3协议进行数据的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、前置说明

Minion作为一个先进的对象存储方案,对于大数据和人工智能的支持有着天然的优势。它支持与Spark\Flink等技术方案进行整合,并且通过S3协议实现数据查询的下沉,这让大数据的存储与查询分离提供了事实依据。
(1) 首先,需要部署minio服务集群,搭建minio对象存储桶,可以参考我的文章Minio+ImgProxy商城图片一站式处理 或minio官网的部署和使用文档。

(2) 根据部署的minio服务的信息(如端口、Access Key、Secret Key、存储桶名称等),创建一个SparkSession对象,可以使用如下步骤进行读写Minio。

1、读取minio需要引入依赖

MinIo支持S3协议,可以使用hadoop的aws包从minIO中读写数据。

       <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-aws</artifactId>
            <version>3.2.0</version>
        </dependency>

3、spark读写minio文件

def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("minio-loader").setMaster("local[*]")
    conf.set("spark.hadoop.fs.s3a.access.key", "minio")
    conf.set("spark.hadoop.fs.s3a.secret.key", "minio123")
    conf.set("spark.hadoop.fs.s3a.endpoint", "http://192.168.0.1:9000")
    conf.set("spark.hadoop.fs.s3a.connection.ssl.enabled", "false")
    conf.set("spark.hadoop.fs.s3a.path.style.access", "true")
    conf.set("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
    conf.set("spark.debug.maxToStringFields", "2048")

    val spark = SparkSession.builder()
      .config(conf)
      .getOrCreate()

    //write file to minio bucket
    import spark.implicits._
    val data = Seq(("李彪", 30), ("林进", 39), ("林磊", 23))
    var dfWriter = data.toDF("Name", "Age")

    val bucketName = "MODEL"
    val minioPath = "s3a://" + bucketName + "/common/outputData"
    //setting write concurrent
    dfWriter = dfWriter.repartition(2)
    dfWriter.write.mode(SaveMode.Overwrite).format("parquet")
      .option("header", "true")
      .save(minioPath)

    //read file from minio
    val dfReader = spark.read.format("parquet")
      .option("header", "true")
      .option("inferSchema", "true")
      .load(minioPath)
    dfReader.show(5)

    spark.stop()
  }
<think>好的,我需要为用户介绍MinIO。首先,我得回忆一下自己对MinIO的了解。记得它是一个开源的对象存储服务,兼容Amazon S3的API。那应该从基本定义开始,说明它是什么,主要用途。 接下来,可能需要提到它的特点,比如高性能、可扩展性强、轻量级。这些是用户关心的点。还要说明它适用于哪些场景,比如大数据分析、AI/ML、云原生应用,这些应用场景能帮助用户理解何时使用MinIO。 然后,架构部分可能需要解释一下,MinIO采用分布式架构,支持纠删码和数据保护机制。用户可能想知道它的可靠性和数据安全是如何保障的。此外,多云支持也是一个重点,能够跨不同云平台部署,这对企业用户来说很重要。 还要注意提到它的开源协议,Apache License 2.0,这样用户可以免费使用和修改。另外,部署的简便性,使用Go语言编写,容易部署在各种环境中,这也是一个优势。 可能需要举一些使用场景的例子,比如作为S3替代方案,或者和Kubernetes结合使用,这样用户能更直观地理解其应用。最后,确保回答结构清晰,分点说明,语言简洁,避免技术术语过多,让不同层次的用户都能理解。 检查一下有没有遗漏的重要信息,比如最新版本的功能或者社区支持情况,如果有的话也应该补充进去。同时,确保LaTeX格式正确,虽然在这个回答中可能用不到数学公式,但如果有涉及的地方要正确应用。最后,用中文自然流畅地组织内容,分段落和列表,使回答易于阅读。</think>MinIO 是一款**高性能、开源、云原生**的对象存储解决方案,具备与 Amazon S3 API 完全兼容的特性。以下是其核心特点与应用场景的详细介绍: --- ### 一、核心特性 1. **S3 兼容性** 支持 Amazon S3 API,可无缝对接现有工具(如 AWS CLI、SDK),降低迁移成本。 2. **高性能存储** 采用 Golang 编写,优化数据读写性能,适用于高吞吐场景(如 AI 训练、大数据分析)。 3. **可扩展架构** - **分布式部署**:支持横向扩展至数千节点,存储容量可达 EB 级。 - **纠删码技术**:通过数据分片与冗余机制(如 $n$ 节点中允许 $k$ 节点故障)保障数据可靠性。 4. **轻量级与易部署** 单二进制文件部署,无外部依赖,支持 Docker/Kubernetes,适合云原生环境。 5. **多云与混合云支持** 可跨公有云、私有云及边缘节点部署,统一管理存储资源。 --- ### 二、典型应用场景 1. **大数据与 AI** - 存储海量非结构化数据(图片、日志等) - 为 Spark、TensorFlow 提供数据湖底层支持 2. **云原生应用** - Kubernetes 持久化存储(通过 CSI 驱动) - 微服务架构中的统一存储层 3. **备份与灾备** 结合 `mc` 命令行工具实现跨集群数据同步与版本控制。 4. **私有云替代方案** 为企业提供经济高效的 S3 兼容存储,避免公有云锁定。 --- ### 三、技术架构 - **对象存储模型**:数据以对象(Object)形式存储,包含元数据与唯一标识符。 - **网关模式**:可将 MinIO 作为代理层,对接后端 NAS 或 HDFS。 - **安全性**:支持 TLS 加密、IAM 策略及客户端加密(SSE-C/SSE-KMS)。 --- ### 四、快速体验 ```bash # 单节点部署(数据目录:~/data) docker run -p 9000:9000 -p 9001:9001 minio/minio server ~/data --console-address ":9001" ``` 访问 `http://localhost:9001` 即可使用 Web 控制台,默认账号密码为 `minioadmin/minioadmin`。 --- ### 五、生态集成 - **监控**:集成 Prometheus/Grafana 指标监控 - **CI/CD**:与 Jenkins、GitLab 等工具对接存储构建产物 - **数据库**:作为 PostgreSQL 大对象存储后端 --- MinIO 凭借其简洁性、高性能和云原生特性,已成为现代应用存储层的热门选择,尤其适合需要自主可控存储基础设施的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琉璃梦境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值