spark读写minio文件代码实践

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()
  }

你可能感兴趣的:(spark,大数据,分布式,Minio)