当前位置: 首页 > news >正文

大数据的挑战是小文件

小文件可能会给存储平台及其支持的应用程序带来大问题。在 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) 用途&#xff…...

网络工程和信息安全专业应该考哪些证书?

网络工程和信息安全专业在校大学生可以考的网络信息安全方向证书有NISP一级、NISP二级、CISP-DSG、CISP-PTE! 一、NISP一级 NISP一级是网络安全行业入门证书! NISP一级报名条件:年满16周岁即可 NISP一级报名时间:随时可报 NI…...

ASP.NET Core 创建使用异步队列

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

从Linux系统的角度看待文件-基础IO

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

总结之Coze 是一站式 AI Bot 开发平台——工作流使用及coze总结(三)

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

汽车线束之故障诊断方案-TDR测试

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

自己做个国庆75周年头像生成器

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 下载相关代码:【免费】《自己做个国庆75周年头像生成器》代码资源-CSDN文库 又是一年国庆节,今年使用国旗做…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...