大数据的挑战是小文件
小文件可能会给存储平台及其支持的应用程序带来大问题。在 Google 上搜索 “small files performance” 会产生 2M+ 的结果。这篇博文将更深入地研究小文件问题,深入研究其根源并总结解决方案。
问题陈述
出于本讨论的目的,小文件通常被视为小于 64 KB 的任何文件。当我们与客户合作优化他们的集群时,我们看到 16 KB 到 1 MB 之间的文件越来越多(以数十亿和万亿计)。像这样的小文件通常是保存机器生成的基于事件的流的结果。将小文件写入对象存储非常简单,但对它们的查询运行速度会慢得多,甚至无法完成。查询许多小文件会产生读取元数据、执行非连续磁盘查找、打开文件、关闭文件并重复的开销。每个文件的开销只有几毫秒,但是当您查询数千、数百万甚至数十亿个文件时,这些毫秒加起来就是这些毫秒。分析引擎难以对大量小文件运行查询。许多企业在处理 IoT 设备、服务器、网络设备和应用程序日志等流源时都面临着这一挑战,所有这些源每秒都可以生成数千个事件日志,每个日志都存储在单独的 JSON、XML 或 CSV 文件中。仅查询一天的日志就可能需要数小时。
为解决昨天的大数据问题而构建的技术无法应对大量小文件的挑战。硬件和应用程序旨在处理少量大文件,但无法提取、编目和查询大量小文件。衡量系统在存储大量小文件时蓬勃发展的能力的关键指标是 IOPS,即每秒输入和输出(读取和写入)的数量。IOP 包括寻道时间、读取时间和数据传输时间。对于机械介质(如硬盘驱动器),顺序读取和写入比随机读取和写入快得多。随机读写单个文件的效率低于连续读写多个文件的效率。元数据管理、跨节点和磁盘的数据分配、I/O 管理、缓存管理和网络开销都可能导致性能低下和存储效率降低。这些是针对大量小文件进行优化时需要关注的领域。优化需要对系统工程有全面的了解,包括硬件和软件的组合和交互。必须从多个层面对大量小文件造成的问题进行攻关,并纠正瓶颈,以实现显著优化。特别是元数据管理,可能会削弱存储系统有效存储大量小文件的能力。在对大型连续文件进行操作时,元数据操作开销会被更大的数据操作开销所抵消。当小文件的数量急剧增加时,元数据操作开始严重降低系统性能。
Hadoop 和小文件
尤其是 Hadoop,它受到了向小文件的转变的沉重打击。Hadoop 可以有效地存储和处理少量大文件,而不是大量小文件。HDFS 的默认块大小现在是 128MB(以前是 64MB)。存储 128MB 文件与存储 16KB 文件占用的 128MB 块相同。此外,HDFS 中的每个文件、目录和块都在元数据中进行跟踪,每条 NameNode 内存记录占用 150 到 300 字节。1 亿个小文件将消耗数百 GB 的 namenode 内存,并且通过存储大部分为空的数据块浪费了 10 TB 以上。随着节点之间的通信量增加,必须写入、映射和查询更多的文件,效率会进一步降低。
SAN/NAS 和小文件
SAN 和 NAS 解决方案在处理大量小文件时也存在不足。这两种技术都旨在提供高 IOPS,但都不是为应用程序的大量并发读取和数据源的写入而设计的。两者都依靠 RAID 和复制来实现持久性和高可用性,这两者都会增加写入延迟并降低存储效率。SAN 提供非常低的延迟和高吞吐量,但仅限于直接连接到它的服务器。NAS 作为网络挂载卷,在存储大量小文件时面临块存储效率低下和文件系统限制的问题。但 NAS 的主要弱点是它无法大规模提供足够的性能,并且在面对大量并发请求时性能会下降。
使用传统数据库
对小文件问题的典型应对措施是将这些微小的数据写入传统的关系数据库。不幸的是,这也无法解决性能问题。它会在一段时间内,但没有数据库可以为 1 PB 的小文件提供持久性和性能。是的,从历史上看,使用数据库来存储和查询小文件是一个不错的主意 - 数据库提供 ACID 事务、索引,并且可以对这些记录执行详细查询,但是当面对解决组织当今面临的大量小文件问题所需的大量记录时,它们无法快速完成这两项工作。数据库在快速摄取大量小文件方面做得不是很好,但这正是流数据使用案例所需要的。表示数据记录、日志条目或设备遥测的小对象以大规模和速度来自无数应用程序和设备。此数据无法写入数据库。任何数据库都无法以支持实时分析所需的速度和规模运行。架构正在从传统的数据库和文件系统中移出来存储和查询大量小文件。数据库是用于 schema on write、分区/分片、提前构建索引以加快查询速度的出色工具,但这些都不适用于大量小文件。
适用于小文件的数据湖仓一体
数据湖仓一体是一个由一部分组成的数据仓库和一个由一部分组成的数据湖,这两个部分都使用底层的对象存储进行存储。这为工程师在决定如何处理大量小文件时提供了多种选择。以 Parquet、AVRO 或 ORC 形式到达的文件可以轻松摄取到数据湖仓一体的数据仓库端。其他文件可以发送到数据湖,在那里可以对其进行分析或转换,以便摄取到数据仓库中。
数据仓库不是普通的数据仓库,它基于开放表格式,提供时间旅行、架构演变、分区演变、零副本分支、外部表和 ACID 事务等现代功能。对于小文件,特别值得注意的是,基于 OTF 的数据仓库是 schema-on-read,在摄取大量小文件时提供性能优势。这是一款功能强大的新兴存储解决方案,可利用对象存储结构化和非结构化数据。由于数据湖仓一体构建在分布式对象存储之上,因此可以轻松横向扩展。此外,计算和存储在数据湖仓一体中解耦,从而允许进一步优化处理用于查询数据仓库的 SQL 的处理引擎。
MinIO 作为数据湖仓一体的存储层
MinIO 非常适合作为数据湖仓一体的存储层。在最近的性能基准测试中,我们测量了 165 GiB/秒的 PUT 吞吐量和 325 GiB/秒的 GET 吞吐量。MinIO 将元数据和对象内联存储,无需查询外部元数据数据库。MinIO 可以在上传后自动提取 .tar 文件,并从 ZIP 档案中下载单个文件。MinIO 的纠删码实施是小对象领先性能、存储效率和功能的关键组成部分。快速纠删码允许大规模捕获小型对象,并在多个驱动器和节点上以奇偶校验方式分发,以立即保护持久性和高可用性。例如,在最大纠删码奇偶校验的情况下,您可以丢失 MinIO 集群中一半的驱动器,但仍能保持持久性。
小文件解决方案
当今的许多工作负载(尤其是流式处理和日志分析)都对应用程序和存储系统提出了很高的要求,迫使它们处理大量小文件。大数据很少意味着分析大文件。更常见的是,大数据意味着数百万或数十亿个小于 1 MB 的文件。数据库和文件系统无法扩展以提供实时分析所需的性能。使用 MinIO 构建的数据湖仓一体是小文件问题的答案。行业领先的性能可加快摄取、查询和检索速度,而纠删码可提供持久性。永远不会丢失数据或导致查询再次超时。
相关文章:

大数据的挑战是小文件
小文件可能会给存储平台及其支持的应用程序带来大问题。在 Google 上搜索 “small files performance” 会产生 2M 的结果。这篇博文将更深入地研究小文件问题,深入研究其根源并总结解决方案。 问题陈述 出于本讨论的目的,小文件通常被视为小于 64 KB …...

迁移学习案例-python代码
大白话 迁移学习就是用不太相同但又有一些联系的A和B数据,训练同一个网络。比如,先用A数据训练一下网络,然后再用B数据训练一下网络,那么就说最后的模型是从A迁移到B的。 迁移学习的具体形式是多种多样的,比如先用A训练…...
MCUboot 和 U-Boot区别
MCUboot 和 U-Boot 都是用于嵌入式系统的引导加载程序,但它们在一些方面存在区别: 功能特性 安全特性侧重不同 MCUboot :更专注于安全引导方面,强调安全启动、固件完整性验证和加密等安全功能。它提供了强大的安全机制来防止恶意…...

Apache OFBiz SSRF漏洞CVE-2024-45507分析
Apache OFBiz介绍 Apache OFBiz 是一个功能丰富的开源电子商务平台,包含完整的商业解决方案,适用于多种行业。它提供了一套全面的服务,包括客户关系管理(CRM)、企业资源规划(ERP)、订单管理、产…...

计算机毕业设计 饮食营养管理信息系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...

828华为云征文|华为云Flexus云服务器X实例部署——盲盒抽奖商城系统以及编译发布小程序
盲盒抽奖商城系统使用 thinkphp6.0 uniapp 开发,做到了全移动端兼容。一个系统不仅可以打包 小程序 还可以 打包APP ,H5 华为云Flexus云服务器X实例在安装搭建盲盒商城小程序方面具有显著优势,这些优势主要体现在以下几个方面: …...
优化理论及应用精解【12】
文章目录 最优化基础基本概念一、目标函数二、约束条件三、约束函数 可行域与可行点可行点可行域可行点与可行域的关系示例 最优值与可行域的关系1. 最优值一定在可行域内取得2. 可行域定义了最优解的搜索空间3. 最优值的存在性与可行域的性质有关4. 最优值与可行域的边界关系示…...
excel 填充内容的公式
多行填充快捷方式: 使用“CtrlEnter”键,这样所有选中的空单元格前就会自动添加上相同的字符。 对于多行填充,Excel提供了几个快捷键来提高工作效率: “CtrlR”用于向右填充数据。如果你在表格的某一列输入了数据,选…...

这款工具在手,前端开发轻松搞定!
这款工具在手,前端开发轻松搞定! 引言 在之前的一篇文章中,已经给大家分享了一款AI助手。尽管该助手能够生成前端代码,但遗憾的是缺少了实时预览的功能。而现在,这一缺憾已经被弥补——你只需要描述你的设计想法&…...

Hadoop三大组件之HDFS(一)
HDFS 简介 HDFS (Hadoop Distributed File System) 是一个分布式文件系统,用于存储文件,采用目录树结构来定位文件。它由多个服务器组成,每个服务器在集群中扮演不同的角色。 适合一次写入,多次读取的场景。文件创建、写入和关闭…...

基于Hadoop的NBA球员大数据分析及可视化系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...
docker容器安装nginx
docker安装nginx部署前端项目 拉取镜像 docker pull nginx:1.24.0运行容器 docker run --name nginx -p 80:80 -d nginx:1.24.0创建本地挂载的目录 mkdir -p /docker/nginx/conf mkdir -p /docker/nginx/log mkdir -p /docker/nginx/html复制运行的nginx配置到宿主机上 将…...

LC记录一:寻找旋转数组最小值、判断旋转数组是否存在给定元素
文章目录 33.搜索旋转排序数组81.搜索旋转排序数组||153.寻找旋转排序数组中的最小值154.寻找旋转排序数组中的最小值||参考链接 33.搜索旋转排序数组 https://leetcode.cn/problems/search-in-rotated-sorted-array/description/ 下面这张图片是LC154题官方题解提供的一个图…...

关于 JVM 个人 NOTE
目录 1、JVM 的体系结构 2、双亲委派机制 3、堆内存调优 4、关于GC垃圾回收机制 4.1 GC中的复制算法 4.2 GC中的标记清除算法 1、JVM 的体系结构 "堆"中存在垃圾而"栈"中不存在垃圾的原因: 堆(Heap) 用途ÿ…...
网络工程和信息安全专业应该考哪些证书?
网络工程和信息安全专业在校大学生可以考的网络信息安全方向证书有NISP一级、NISP二级、CISP-DSG、CISP-PTE! 一、NISP一级 NISP一级是网络安全行业入门证书! NISP一级报名条件:年满16周岁即可 NISP一级报名时间:随时可报 NI…...

ASP.NET Core 创建使用异步队列
示例图 在 ASP.NET Core 应用程序中,执行耗时任务而不阻塞线程的一种有效方法是使用异步队列。在本文中,我们将探讨如何使用 .NET Core 和 C# 创建队列结构以及如何使用此队列异步执行操作。 步骤 1:创建 EmailMessage 类 首先,…...

从Linux系统的角度看待文件-基础IO
目录 从Linux系统的角度看待文件 系统文件I/O open write read 文件操作的本质 vim中批量注释的方法 从Linux系统的角度看待文件 关于文件的共识: 1.空文件也要占用磁盘空间 2.文件内容属性 3.文件操作包括文件内容/文件属性/文件内容属性 4.文件路径文…...

总结之Coze 是一站式 AI Bot 开发平台——工作流使用及coze总结(三)
工作流介绍 工作流支持通过可视化的方式,对插件、大语言模型、代码块等功能进行组合,从而实现复杂、稳定的业务流程编排,例如旅行规划、报告分析等。 当目标任务场景包含较多的步骤,且对输出结果的准确性、格式有严格要求时&…...

汽车线束之故障诊断方案-TDR测试
当前,在汽车布局中的线束的性能要求越来越高。无法通过简单的通断测试就能满足性能传输要求。早起对智能化要求不高,比如没有激动雷达、高清摄像、中央CPU等。 近几年的智能驾驶对网络传输要求越来越高,不但是高速率,还需要高稳定…...

自己做个国庆75周年头像生成器
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 下载相关代码:【免费】《自己做个国庆75周年头像生成器》代码资源-CSDN文库 又是一年国庆节,今年使用国旗做…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

如何把工业通信协议转换成http websocket
1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...