当前位置: 首页 > 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文库 又是一年国庆节,今年使用国旗做…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...