--------------------------

  • 一. 前言
  • 二.minIo
    • 2.1. 安装
      • 2.1.1. 服务端
      • 2.1.2. 客户端
    • 2.2.架构
    • 2.3. MinIO存储桶通知指南
    • 2.4.集成
    • 2.5. 在 html 文件中引用静态资源
    • 2.6.Java 客户端 API 操作
      • 2.6.1.添加依赖
      • 2.6.2.列出文件
      • 2.6.3.上传文件
      • 2.6.4.下载文件
      • 2.6.5.删除文件
      • 2.6.6.代码示例
    • 2.7. 生态扩展
    • 2.8. 探探案例分享
  • 三.ozone
    • 3.1.介绍
    • 3.2. 安装
    • 3.3.Ozone的设计原则
    • 3.3. 架构
    • 3.3. 杂谈
  • 四. 阿里OSS
    • 4.1 简介
    • 4.2. 报价

一. 前言

OSS(Object Storage Service)俗称对象存储,主要提供图片、文档、音频、视频等二进制文件的海量存储功能。
目前除了公有云提供对象存储服务外,一般私有云比较关心一些开源的分布式对象存储解决方案。

公有云一般都提供对象存储服务,如阿里云的OSS,华为云的OBS,腾讯云的COS。

一些开源的对象存储都会遵循Amazon s3协议。
Amazon s3协议定义了操作对象存储的Resestfull风格的API。通过在pom中引用aws-java-sdk-s3可以实现对存储的操作。

 Hadoop使企业能够对庞大的非结构化数据集进行大规模分析处理。这个数据集可以包含数以百万计,甚至数十亿个需要读取的文件。为了降低成本并提高数据处理性能,数据和应用程序应该存在于相同的物理硬件上。这样做使数据无需移动,就地处理,并允许使用不算昂贵的服务器级存储。 Hadoop分布式文件系统(HDFS)是为了管理这些分散在各个节点上的数据而应运而生的。然而现代存储架构提供了一个可以替代HDFS的引人注目的新方案:对象存储。为什么对象存储是您的组织进行Hadoop分析的一个可选项呢,下面将谈到三方面的原因。原因一:对象存储可提供更好的数据保护虽然HDFS能够利用内部的服务器级存储,它实际上是按照其标准的数据保护策略将所有数据做了三个副本。因此,尽管可以使用较便宜的服务器内部的硬盘驱动器,它可能并不像最初希望的那样经济,因为容量需求要乘以3。一种替代方案是使用基于对象的存储系统,提供亚马逊简单存储服务(S3)协议访问,这是Hadoop除了HDFS也同样支持的。这些系统可以是纯软件,因此可以使用商用服务器和服务器级存储。但不同于默认的HDFS,许多对象存储系统都提供纠删编码。这种数据保护机制类似于RAID但粒度更细,可以在对象或子对象的层面操作,把数据和奇偶校验位分布到存储集群的各个节点上。其结果是,可以达到相似或更高水平的数据冗余性,而只需大约25%至30%的额外开销。相比之下, HDFS的标准三副本配置下的额外容量开销为200%。原因二:HDFS会暴露主节点HDFS具有一个主节点和一系列从节点。从节点处理数据并将结果发送给主节点。主节点还需要维护数据复制策略以及基本的集群管理。如果主节点发生故障,集群的其余节点将不能被访问。 HDFS对主节点只提供了有限的保护,所以企业需要采取特殊措施来实现主节点的高可用性。如上所述,在对象存储系统中,主节点与从节点都能受到相同的纠删编码的数据保护。此外,由主节点维护的管理Hadoop集群所需的所有元数据(metadata)都可以存储在集中化的对象存储系统中。这样当主节点发生故障时,从节点或备用节点可以迅速变成为主节点。原因三:HDFS不能进行单独扩展像任何其他架构一样,Hadoop对计算和存储容量也会有不同程度的需求。问题是,HDFS要求计算能力和存储容量需要按比例进行扩展,这意味着你不能单独对某一种资源进行扩充。要说明这一点最常见的方式是当一个Hadoop架构的存储容量用尽时,因为增加更多容量就意味着加入另一个装满硬盘的节点,这也增加了更多的计算能力。反之亦如此,作为Hadoop基础设施,往往需要更多的处理能力,但存储空间却很充裕。大多数时候,当购置了一个新的服务器以增加计算能力时,它也带来了新的存储空间。其结果是,Hadoop架构总是在某种资源上浪费金钱,而对另一种资源却总是缺乏。对象存储允许容量和计算能力各自独立地进行扩展。计算节点可以是1U或2U的机箱,通过固态存储引导。对象存储系统可以装满高容量驱动器,从而保持每GB成本最低。更重要的是,随着应用环境的变化,每一层都可以独立扩展。HDFS之于Hadoop的主要优点是低成本和高性能,这得益于数据存放于本地。而利用商业存储硬件的对象存储系统同样可以提供类似的低成本,尤其是当采用纠删编码来提高数据保护效率时更是如此。10 GbE的高速网络现在已经很实惠,这些都使HDFS将数据和计算放在一起所带来的性能优势不复存在。对象存储提供了一种更具成本效益,更可靠,而且性能至少跟HDFS相当的基础架构,它理所当然应该成为一种可行的HDFS替代解决方案。

二.minIo

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

官网: https://min.io/
收费: https://min.io/pricing
github : https://github.com/minio/minio ( star 25.3k , fork 2.7k , contributors 276 )
开源协议说明:http://ewen0930.github.io/2016/11/open-source-licenses/

2.1. 安装

2.1.1. 服务端

下载:

wget https://dl.min.io/server/minio/release/linux-amd64/minio

授权:
chmod +x minio

启动:
cd /data/minIO
./minio server /data/minIO/data/

访问:
http://192.168.100.23:9000
minioadmin / minioadmin

MinIO 默认的策略是分享地址的有效时间最多是7天,要突破这种限制,可以在 bucket 中进行策略设置。
点击对应的 bucket ,edit policy 添加策略 .,Read Only,

如此就放开了访问,没有时间限制,同时只需要按
http://MINIOHOST:{MINIO_HOST}:MINIOH​OST:{MINIO_PORT}/bucketName/{bucketName}/bucketName/{fileName}
则可直接访问资源(不需要进行分享操作)。

示例:
http://192.168.100.23:9000/tmp/AAAAA.pdf

2.1.2. 客户端

安装
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc

建立连接:
./mc alias set minio http://192.168.100.23 minioadmin minioadmin --api s3v4

命令示例
./mc ls

ls       列出文件和文件夹。
mb       创建一个存储桶或一个文件夹。
cat      显示文件和对象内容。
pipe     将一个STDIN重定向到一个对象或者文件或者STDOUT。
share    生成用于共享的URL。
cp       拷贝文件和对象。
mirror   给存储桶和文件夹做镜像。
find     基于参数查找文件。
diff     对两个文件夹或者存储桶比较差异。
rm       删除文件和对象。
events   管理对象通知。
watch    监视文件和对象的事件。
policy   管理访问策略。
config   管理mc配置文件。
update   检查软件更新。
version  输出版本信息。

官方文档: https://docs.min.io/cn/minio-client-complete-guide.html

2.2.架构

官方地址: https://min.io/product/overview

2.3. MinIO存储桶通知指南

可以使用存储桶事件通知来监视存储桶中对象上发生的事件。 MinIO服务器支持的事件类型是

Supported Event Types
s3:ObjectCreated:Put s3:ObjectCreated:CompleteMultipartUpload s3:ObjectAccessed:Head
s3:ObjectCreated:Post s3:ObjectRemoved:Delete
s3:ObjectCreated:Copy s3:ObjectAccessed:Get

使用诸如mc之类的客户端工具通过event子命令设置和监听事件通知。也可以使用MinIO SDK BucketNotification APIs 。MinIO发送的用于发布事件的通知消息是JSON格式的,JSON结构参考这里。

存储桶事件可以发布到以下目标:

支持的通知目标
AMQP Redis MySQL
MQTT NATS Apache Kafka
Elasticsearch PostgreSQL Webhooks
NSQ

官方文档:
https://docs.min.io/cn/minio-bucket-notification-guide.html

2.4.集成

https://min.io/product/integrations

对飚:
https://docs.min.io/docs/disaggregated-spark-and-hadoop-hive-with-minio.html
https://blog.min.io/benchmarking-apache-spark-vs-aws-s3/
https://blog.min.io/stream-processing-with-apache-flink-and-minio
https://blog.min.io/running-presto-on-minio-benchmarking-vs-aws-s3/

TCP-H:
https://cloud.tencent.com/developer/article/1025669

TPC-H是一款面向商品零售业的决策支持系统测试基准,它定义了8张表,22个查询,遵循SQL92。
TPC-H基准的数据库模式遵循第三范式,叶晓俊教授等学者[6]认为“它的数据表数据特征单一(如数据不倾斜) ,
其数据维护功能仅仅限制了潜在的对索引的过度使用,而没有测试DBMS 执行真实数据维护操作——数据提取、转换和加载(ETL) 功能的能力”。
同时,新兴的数据仓库开始采用新的模型,如星型模型、雪花模型。TPC-H已经不能精准反映当今数据库系统的真实性能。
为此,TPC组织推出了新一代的面向决策应用的TPC-DS 基准。

TPC-DS认证现状

TPC-DS以其高标准、高要求得到大家的广泛认知,理应得到广泛的应用,但是到目前为止还没有任何厂商得到TPC官方的认证。究其原因,本文认为:
传统的数据库厂商,DBMS系统比较成熟,SQL的支持也相当完善,但是其分布式、并行处理能力欠缺,导致其性能很差。所以传统的厂商不愿意发布测试结果。
新型的计算模型如Map/Reduce、spark,具有较好的并行处理能力,
但是SQL的兼容性比较差,如HiveSQL、SparkSQL只支持40个SQL,从而也无法发布TPC-DS测试报告。
尽管如此,各厂商还是通过非TPC官方的途径发布TPC-DS的部分测试结果,以展现其在性能方面的提升。由此可见大家对TPC-DS的程接受度。

2.5. 在 html 文件中引用静态资源

<div class="img-list"><img src="http://${MINIO_HOST}:${MINIO_PORT}/image/test.jpg" alt="图片"></div><div class="audio-list"><audio src="http://${MINIO_HOST}:${MINIO_PORT}/audio/test.mp3"controls="controls"></audio></div><div class="video-list"><video src="http://${MINIO_HOST}:${MINIO_PORT}/video/test.mp4" controls="controls"></video></div></div>

2.6.Java 客户端 API 操作

2.6.1.添加依赖

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>6.0.13</version>
</dependency>

2.6.2.列出文件

/*** 罗列文件* @param minioClient* @param bucketName*/
public void listFile(MinioClient minioClient, String bucketName) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {try {Iterable<Result<Item>> results = minioClient.listObjects(bucketName);Iterator<Result<Item>> iterator = results.iterator();while (iterator.hasNext()) {Item item = iterator.next().get();System.out.println(item.objectName() + ", " + item.objectSize() + "B");}} catch (MinioException e) {System.out.println("Error occurred: " + e);}
}

2.6.3.上传文件

/*** 上传文件* @param minioClient 操作客户端* @param bucketName 上传的bucket名称 * @param objectName 上传后存储在bucket中的文件名* @param filePath 上传的本地文件路径*/
public void uploadFile(MinioClient minioClient, String bucketName, String objectName, String filePath) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {try {// 若不存在bucket,则新建boolean isExist = minioClient.bucketExists(bucketName);if (!isExist) {minioClient.makeBucket(bucketName);}// 使用 putObject 上传文件minioClient.putObject(bucketName, objectName, filePath, null, null, null, null);} catch (MinioException e) {System.out.println("Error occurred: " + e);}
}

2.6.4.下载文件

/*** 下载文件** @param minioClient 操作客户端* @param bucketName 上传的bucket名称 * @param objectName 上传后存储在bucket中的文件名* @param downloadPath 下载文件保存路径*/
public void downloadFile(MinioClient minioClient, String bucketName, String objectName, String downloadPath) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {File file = new File(downloadPath);try (OutputStream out = new FileOutputStream(file)) {InputStream inputStream = minioClient.getObject(bucketName, objectName);byte[] tempbytes = new byte[1024];int byteread = 0;while ((byteread = inputStream.read(tempbytes)) != -1) {out.write(tempbytes, 0, byteread);}} catch (MinioException e) {System.out.println("Error occurred: " + e);}
}

2.6.5.删除文件

使用removeObject即可。

minioClient.removeObject(bucketName, objectName);

2.6.6.代码示例

代码操作:
https://docs.min.io/cn/java-client-quickstart-guide.html
https://docs.min.io/cn/java-client-api-reference.html

https://github.com/BoYiZhang/my-example/edit/master/minio-simple-demo/src/main/java/me/mason/demo/minio/FileManager.java
https://my.oschina.net/mianshenglee/blog/3215488

2.7. 生态扩展

2.8. 探探案例分享

https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/102480036

三.ozone

官网 : https://ozone.apache.org/
git 地址: https://github.com/apache/ozone ( star 273 , fork 170 , contributors 96 )

3.1.介绍

Ozone 是 Apache Hadoop 社区的新一代分布式存储系统,它的出现满足了大量小文件的存储问题,解决了 Hadoop 分布式文件系统在可扩展性上的缺陷。作为 Hadoop 生态圈的一款新的对象存储系统,能够支持百亿甚至千亿级文件规模的存储。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4vKsRG4U-1610026359007)(./images/ozone.png)]

Ozone 1.0.0 除了支持 Hadoop Compatible FileSystem、Hadoop 2.x 以及 Hadoop3.x 环境,还兼容 Hadoop 生态的 Kerberos 认证体系,支持数据的用户无感知加密存放和 Ranger 授权集成、GDPR “Right to Erasure”以及网络构架感知。1.0.0 意味着该系统已经具备在大规模生产环境下实际部署的能力。

值得一提的是,根据腾讯介绍,腾讯云大数据团队在 Ozone 项目上主导完成了集群网络拓扑感知的开发,以及数据写入 Multi-Raft Pipeline 功能的开发。同时,主导的 StorageContainerManager(SCM) 高可用 HA 功能也正在开发中。

以集群网络拓扑感知来说,在传统的大数据构架下,有了网络拓扑结构,计算引擎的调度器可以将任务调度到离数据最近的节点来获取“数据的局部性”。即便是新兴的计算存储分离构架,同样也需要集群网络拓扑信息,来保证数据的故障容错能力和高可用性。

腾讯团队 Ozone 项目负责人陈怡介绍,在 Ozone 的 Alpha 版本发布后,腾讯内部的大数据平台上线了 Ozone 生产集群,承接了一部分业务的数据存储。随着数据服务体量的增加,逐渐发现 Ozone 写入性能显现出了一定的波动和瓶颈。基于这个发现,腾讯 Ozone 项目组设计并开发了数据写入 Multi-Raft Pipeline 功能,显著提升了 Ozone 的写入吞吐量和性能。

为了确保 Ozone 和 Hive、Spark 与 Impala 等计算框架的无缝对接,Ozone 1.0.0 与这几大平台进行了集成测试,TPC-DS 的测试表明,在 100GB 和 1TB 两种数据量大小下,Ozone 总体比 HDFS 有 3.5% 的优势。

3.2. 安装

aws s3api --endpoint http://127.0.0.1:9878 create-bucket --bucket=wordcount

docker run -p 9878:9878 -p 9876:9876 apache/ozone

http://localhost:9876/#!/

docker ps

docker exec -it 2da8f74323a3 /bin/bash

ozone fs -mkdir -p /tmp/test
ozone fs -put README.md /tmp/test
ozone fs -ls /tmp/test
ozone fs -cat /tmp/test/README.md

3.3.Ozone的设计原则

Ozone 由一群对大规模Hadoop集群有着丰富运维和管理经验的工程师和构架师设计和实现。他们对大数据有深刻的洞察力,清楚的了解HDFS的优缺点,这些洞察力自始自终影响了Ozone的设计和实现。Ozone的设计遵循一下原则:

  • 强一致性
    构架简洁性:
    当系统出现问题时,一个简单的架构更容易定位,也容易调试。Ozone尽可能的保持架构的简单,即使因此需要可扩展性上做一些妥协。但是在Ozone在扩展性上绝不逊色,目标是支持单集群1000亿个对象。

  • 构架分层
    Ozone 采用分层的文件系统。Namespace 元数据的管理,数据块和节点的管理分开。用户可以对二者独立扩展。

  • 容易恢复
    HDFS 一个关键优点是,它能经历大的灾难事件,比如集群级别的电力故障,而不丢失数据, 并且能高效的从灾难中恢复。对于一些小的故障,比如机架和节点级别的故障,更是不在话下。Ozone 将继承 HDFS 的这些优点。

  • Apache开源
    Apache 社区开源对于 Ozone 的成功非常重要。所有 Ozone 的设计和实现都在社区中进行,接受社区所有人的 Review。

  • 和Hadoop生态的互操作性
    Ozone 可以被 Hadoop 生态中的应用,如 Apache Hive、Apache Spark 和 Mapreduce 无缝对接。Ozone 支持 Hadoop Compatible FileSystem API (aka OzoneFS)。通过 OzoneFS, Hive,Spark 等应用不需要做任何修改,就可以运行在 Ozone上 。Ozone 同时支持 Data Locality,使得计算能够尽可能的靠近数据。

3.3. 架构

https://mp.weixin.qq.com/s/32ZjcEsDypspIKU_AKLfmQ

安装:
https://www.cnblogs.com/ronnieyuan/p/11982671.html

3.3. 杂谈

不务正业 : https://developer.aliyun.com/article/758851

四. 阿里OSS

4.1 简介

海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。

4.2. 报价

https://cn.aliyun.com/product/oss

对象存储入门 [ minIo ozone ]相关推荐

  1. 对象存储服务MinIO

    MinIO简介 MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档.由于采用Golang实现,服务端可以工作在Windo ...

  2. 免费版对象存储【minIO】CentOS部署实践记录 2021

    好久没写,记录一下 1.背景 之前一直用的七牛,不过是收费的,然后有些定制化需求,可能比较看重预算,然后就有了这篇开源方式:minio 2.简介 官方文档:http://docs.minio.org. ...

  3. 新版JAVA对象存储(Minio)

    最近突然想搞一下对象存储,搜了搜发现博客上的都是旧写法,踩了好多坑,所以写了这篇博客.本人是菜鸟一个如果有错望指正. 文章目录 1.分布式文件系统应用场景 1.1 Minio介绍(http://www ...

  4. 轻量级对象存储服务minio安装及使用

    简介 Minio 是一个基于Apache License v2.0开源协议的对象存储服务,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器/虚拟机镜像等,而一个对象文件可以 ...

  5. 自建对象存储 minio 搭建和使用

    官网 ### https://min.io/docs/minio/kubernetes/upstream/ 介绍 MinIO 是一款高性能.分布式的对象存储系统. 它是一款软件产品, 可以100%的运 ...

  6. MinIO 对象存储

    MinIO 对象存储 1.MinIO 安装 Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能. 官网地址:MinIO | High Performance, K ...

  7. 可视化的对象存储服务

    可视化的对象存储服务 MinIO简介 安装 MinIO Console使用 客户端使用 MinIO Client 常用命令 MinIO Client 安装及配置 MinIO Client 常用操作 兼 ...

  8. 对象存储搭建文件服务器,搭建分布式对象存储服务MinIO-单点模式

    # 搭建分布式对象存储服务 MinIO-单点模式 本文介绍开源的分布式对象存储服务 MinIO 的单点模式的搭建步骤.对象存储系统相比于传统的 NAS 文件系统有很多的优势,访问效率高.方便扩容,支持 ...

  9. MiniO对象存储服务 磁盘缓存快速入门 ​​​​​​​

    MiniO对象存储服务 磁盘缓存快速入门 这里的磁盘缓存功能是指使用缓存磁盘来存储租户常用的一些数据.例如,假设你通过gateway azure设置访问一个对象并下载下来进行缓存,那接下来的请求都会直 ...

  10. Minio分布式对象存储的部署与使用

    一.部署 下载Minio直接Github搜索即可,minio/minio: Multi-Cloud Object Storage 1.1 单机部署 单机部署命令,指定静态端口9001. 一般会占用两个 ...

最新文章

  1. swiper4自动轮播切换手动触碰后停止踩坑——属性disableOnInteraction
  2. 条件注释判断浏览器版本!--[if lt IE 9]
  3. 未来,大脑扫描背包将神经科学带入现实世界
  4. 面向对象程序设计_面向对象的程序设计(续)
  5. UNITY 的GC ALLOC到底是什么
  6. 【机器学习基础】数学推导+纯Python实现机器学习算法17:XGBoost
  7. 《MySQL——redo log 与 binlog 写入机制》
  8. [AT2699]Flip and Rectangles
  9. SSAS的MDX语句整理
  10. python软件下载教程-使用最方便的计算机编程软件,Python下载使用完美教程
  11. 动态规划之01背包问题(含代码C)
  12. mysql存储过程的学习(mysql提高执行效率之进阶过程)
  13. 互联网早报20220720
  14. 打造企业云三级火箭,EasyStack未来五年计划凸显雄心壮志
  15. 传感器怎么获取障碍物的宽度信息_基于多传感器信息融合的机器人障碍物检测...
  16. 建筑施工与管理计算机综合应用能力实训报告,建筑施工管理计算机综合应用能力实训报告...
  17. texstudio使用
  18. 艺赛旗 (RPA) Python 的数据类型
  19. 互联网应用的架构演变之路
  20. 打算抽时间自学一下游戏制作,做一款Mud文字游戏

热门文章

  1. ppt 转html乱码,ppt转换成pdf乱码解决方法.pdf
  2. 项目管理-成熟度模型、量化项目管理
  3. 线上生成电子签名具体方法
  4. 正北坐标系和车辆坐标系下的heading转换
  5. java圆角矩形_如何在java中绘制自定义圆角矩形?
  6. 8421码到5421码的转换_8421BD码转换成5421BCD码.doc
  7. 解决 python plt画柱状图(棒状图)时横坐标刻度线不在中间而在右边
  8. win10系统 你需要权限来执行此操作 System32
  9. win server 2008r2 相关设置
  10. 微信小程序——三角形面积计算