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

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

网站指纹识别

网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...