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