HDFS概述及其优缺点

news2024/12/23 14:05:33

什么是HDFS?

HDFS的全称是hadoop distributed file system,即hadoop的分布式文件系统。

见名知意,它就是用来进行文件存储的。毕竟它是大数据的一个组件,用来存储这种海量的数据。

它是基于03年10月份,谷歌发表的GFS这篇论文做的开源实现。目前是hadoop的一个核心子项目,用来解决海量数据存储的问题。

hadoop的三个子项目,一个是HDFS,一个是YARN,一个是MapReduce。

目前在开源大数据技术体系中,它的地位是无可替代的。

第一它诞生年限比较早,这么长时间的发展,它是非常成熟非常可靠的。再一个它的生态圈也非常广泛,社区这一块也非常活跃。在分布式文件系统选型的时候一般还是首选。

HDFS有什么优势

1、海量数据存储(典型文件大小GB~TB,百万以上文件数量, PB以上数据规模)

HDFS能够存储海量数据,这是它作为文件系统的必要的功能;它存储的数据典型文件大小是GB到TB,单个文件比较大,整体的一个规模也比较高。

海量的数据可以存得下,单个文件比较大也可以存得下。

它的一个存储方式就是多节点存储,至少使用3个节点来进行数据存储,如果存不下则可以进行节点的扩充来提升存储容量。

如果是某一个文件比较大,比如说一个文件是10个tb。10个tb的话直接存在某1个节点肯定是有压力的,所以它的方法在于先切分。不管你这个文件多大,先切成默认128M的这些小的数据块(称为Block块)。

为什么是128M?其实在1.x版本里面它是64M,因为那会儿硬件性能还不是特别好,硬盘的读取效率大概就是五六十兆每秒。目前的硬盘的读取效率大概是100M每秒,所以它的切分的力度就稍微扩大了一些。

切分成这些小数据块以后,把这些小数据块打散存储到各个节点。这样也就意味着不管单个文件多大,都可以完成存储。

2、高容错(多副本策略)、高可用(HA,安全模式)、高扩展(10K节点规模)

再一个存起来它是高容错的,集群的任意一个节点挂掉,它其实数据是不丢失的,数据是可靠的。或者任意一个盘挂掉,盘的损坏是不影响数据的。这个是怎么办到的?它采用多副本,就是多备份几份。

拆出来的这些数据块存储在某一节点后,还要在其他节点进行备份。这样的话任意一个节点挂掉没关系,另外的两个副本还在,数据是不丢的。

而且整个平台它是高可用的,高可用主要是针对管理节点。包括高扩展,性能不够或者存储容量不够,可以通过增加节点来扩容。

所以前两个是它作为一个文件系统基本的职责。

3、构建成本低、安全可靠(构建在廉价商用机器上,提供容错机制)

相对于其他系统,它的一个好处或者优势还在于构建成本低,而且安全可靠。它可以构建在廉价的商用机器上,而且提供这种容错机制,容错机制是通过多副本形式提供的。

这样的话能够极大的降低硬件的成本。

因为之前大家用的服务器,都是一些大型机或者中型机,就是非常昂贵的商用的服务器。那种的话硬件会比较可靠一些。

但HDFS它的软件机制,因为提供了容错,可以部署在廉价商用机器上。这个是企业非常希望看到的,节约了成本。

4、适合大规模离线批处理(流式数据访问,数据位置暴露给计算框架)

而且它存起来的数据适合大规模的底线批处理,为后面的mapreduce或者spark计算框架服务。它们在计算的时候要用到一种方式叫移动计算而非移动数据,就是数据不要动,把计算任务移动到数据节点。

而hdfs天然支持这种模式,原因在于HDFS把数据保存起来之后,HDFS的管理节点会记录这些数据的位置,这个时候计算任务想要分发到数据节点,那HDFS可以提供数据的具体位置,让计算任务来完成一个分发操作。

所以这是它的整个优点。总结起来其实也很简单,能存储海量的数据,而且存起来高容错;如果存储不下可以扩展,构建成本又比较低,存起来的数据能满足后续的大规模的离线批处理。

HDFS不适合哪些场景

当然对于一个组件来说,它既有优点就会有缺点。缺点其实并不是说这个软件有问题,而是这个软件它不适合的场景。

我们要有一个这样的概念,就是说软件它一定有适合的场景,也有它不适合的场景。软件没有好坏,技术没有好坏,它在适合的场景里可以发挥它的优势,在不适合的场景里面就会导致生产上的一些问题。

对于hdfs它不适合哪些场景?

1、不适合低延迟数据访问

HDFS不适合低延迟的数据访问,它完成数据读写的时间是比较长的。大家可以想象一下,1个文件比如说1GB,它首先要拆分出128M的数据块,拆分需要一段时间;拆分完以后,这些拆分出来数据块,要往集群里面进行存储,而且在存储的时候还要进行多副本的备份。

存储完成后,这些数据的位置都要记录在管理节点;即这个文件它拆分成多少块,每一块在哪些节点上存着,而且默认会存储三个副本,这些位置都要记录在管理节点。整个调度流程就很长,所以它的写的延迟会比较高一些。

当然这个也可以理解,因为hdfs它的本质目的是为了满足海量数据的一个存储。它先要保证你这个海量数据能够存得下,然后再来保证其它的特性,所以延迟这一块并不是它主要关注的一个内容。

而且在数据读取的时候,因为数据块是存储到在集群各个节点里面,于是需要从hdfs管理节点先找到到这个文件的位置信息,然后在各个节点里面进行数据块的找回;数据块先读回到客户端,并在客户端合并成最终的原始文件。可想而知读的延迟也是会比较高的。

所以你可以把hdfs当成一个海量数据,或者大文件存储的一个软件,但是你不能要求它是低延迟的,因为它设计的重点不在这里。

2、不适合大量小文件存储(元数据占用NameNode大量空间,移动计算时任务数量增加)

HDFS不适合小文件存储,这个是非常重要的,小文件存储会带来很多的问题。第一是存储上的问题,第二是计算上的问题。

当一个文件存储完成之后,在hdfs的管理节点要对数据的位置信息进行记录。记录这个文件,它被拆分成了多少Block块(数据块),这些数据块它在哪些节点存着,这个信息我们叫元数据。

元数据会记录在管理节点内存当中。

一个1GB的文件如果被拆分成5个Block块,在hdfs的管理节点内存当中,只需要记录5份元数据信息。同样的1GB的文件,它被拆分成1024份,每一个Block块其实是1M,这个时候管理节点内存当中肯定会占1024份的空间。

大量的小文件都存上来之后,有可能会把管理节点的内存占满。这个时候集群中的所有的文件,就都没办法进行操作了,因为管理节点这块内存已经溢出。

所以小文件存的越多,对管理节点带来的内存压力越大。

第二,小文件对计算会产生压力。1GB的文件如果被拆分成三份进行存储,在运行计算任务的时候,只需要分发三个计算任务上去就可以了(移动计算而非移动数据),即需要3个Task。

同样的1GB文件,如果被拆分成了1024份,在做相同的计算任务时,要分发1024个task上去,大家想一下哪个计算效率更高?肯定是相对大的这种文件,计算效率更高,因为只需要分发3个task。

同样的1024个task它要生成,然后再要调度再要分发,这个过程中花费了大量的时间;虽然每个task运算效率其实很高,因为每个task只需要处理1MB的数据,但是在前期的调度过程中花费了大量的时间。

所以不只是hdfs,像所有的大数据的框架,它对小文件这一块都是比较头疼的。

那什么叫小文件?小文件其实是远远小于128M(一个标准Block大小)的这些文件。

3、不支持并发写入

HDFS它不支持并发写入,其实是它为了保证数据的可靠性导致的。

它不支持把文件拆分成多份之后,使用并发任务将数据块写入到各个节点。因为在并发过程中,万一说某几个数据块没有写入成功,它带来的维护成本其实是非常高的。

假设一个文件大小为1tb,它可能拆分成几千份或者几万份,这个时候如果你走并发,带来的维护成本是可想而知的。

所以它在数据进行写入的时候是先拆分,拆分后单线程顺序写入,这样的话首先能保证数据可靠,再一个维护成本也会大大的降低。

所以它不支持这种并发写;当然我们也可以理解,它首要任务是保证海量数据的一个存储,完成了基本功能后,再去考虑其他的功能。

它的延迟包括并发这一块其实要差一点。

4、不支持文件随机修改(仅支持追加写入)

HDFS不支持文件的随机修改,仅支持文件的追加写入。也是出于hdfs基本功能的一个考虑,因为文件存储在HDFS里,并且会存储三个副本,三个副本均在不同的节点。

假设整个集群有50Pb的数据,有这么多数据的情况下,如果开放了随机修改的功能,势必在同一时间会有大量的更改操作。而且更改任务一定是三个节点同时进行的。即使只有1pb的数据触发了随机修改任务,整个集群也是承受不住的。

集群的压力一旦飙升上来之后,它连最基础的这种数据读写功能都完成不了。所以hdfs是不支持文件随机就改。

如果说硬要去做文件修改,可以把之前的文件删掉,然后把新文件给它追加进去,这样是可以的。

如果这个时候有的同学说不理解了,在生产环境中把文件写进去以后,它明明会有很多的这种更改操作,hdfs不支持更改那怎么办呢?

那就不要用hdfs,hdfs它只是一个文件系统,如果想对文件系统里面的数据进行更改,可以用基于HDFS文件系统的一些软件,比如说数据库,在大数据这一块的话有hbase、hive。

它们这些上层软件,是支持对数据进行修改的。虽然说它们的文件最终也是存在hdfs里,但是它们上层实现了随机修改的功能。

OK,HDFS的基本概念就分享到这里,配套视频讲解,可以在B站【数舟】中观看,B站传送门:https://www.bilibili.com/video/BV1bs4y1v7eq/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/617316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop 怎么委任和解除节点?

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 正文 Hadoop 集群的管理员经常需要向集群中添加节点…

Android Studio引用第三方库的方式

title: 大小端详解 date: 2023-06-06 21:01:24 comments: true #是否可评论 toc: true #是否显示文章目录 categories: #分类 - gradle - android studio tags: #标签 - gradle - android studio summary: android stduio 导入第三方库方式 Android Studio引用第三方库的方式 …

NCUTer 我的创作纪念日(2023-06-06)

前言 大家好,我是NCUTer,今天收到私信,突然发现,我来到CSDN已经2年多了,距离发布第一篇博客已经2年整了。正式规划性的写博客,是在2021年6月底开始的,当时啥也不懂,不知道该怎么去做…

10万字XX市开发区智慧综治中心平台建设一期工程招标文件word

(一)智慧综治中心信息化平台 需基于“一个平台,多级用户”的原则,利用移动互联网、物联网、大数据、人工智能和地理信息等新一代信息技术,整合辖区多方社会治理数据,建立一个覆盖全区三级综治中心用户的统一…

2个原因解答:为什么网络安全缺口大,招聘却很少?

2023年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢?…

【博客639】Life of a label in prometheus

prometheus中label的生命周期 前言 Prometheus labels allow you to model your application deployment in the manner best suited to your organisation. As directly supporting every potential configurations would be impossible, we offer relabelling to give you t…

Paxos算法

组成 Paxos算法有proposer, accepter, leaner三种角色节点,其中proposer有点像客户端,而accepter是存储节点。 持久化需要 basic-Paxos是二阶段进行的 第一阶段 propose发起prepare请求,带上rnd accpeter如果发现rnd,比如自己…

图论在数学建模中的应用及MATLAB实现

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 图论基本概念 图论原理 1. 最短路径问题 2. 最小生成树问题 MATLAB实现 1. 创建图 2. 最短路径算法 3. 最小生成树算法 数学建模案…

第一章 小程序入门

文章目录 前言一、❎ 环境搭建1、AppID2、设置外观和代理3、小程序项目构成小程序的基本结构小程序的页面组成部分 4、JSON 配置文件JSON 配置文件的作用app.json 配置文件project.config.json 配置文件sitemap.json 配置文件页面 .json 配置文件 5、WXML 模板什么是 wxmlwxml …

Java --- springboot3之web静态资源配置

目录 一、静态资源规则 二、欢迎页规则 三、favicon.ioc规则 四、HTTP缓存机制 五、自定义静态资源规则 5.1、配置方式 5.2、代码方式 一、静态资源规则 Override public void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.is…

UA-ModelCompiler 的编译和使用

UA-ModelCompiler 是OPCFoundation的开源程序,它实现将NodeSet 的xml 文件编译成C# 的类,以便结合到UA Server 中。同时,它也能够将一种简便的模型xml 文档(ModelDesgin.xml) 转换成为NodeSet2.xml 。 最近的项目中要使用UA-ModelCompiler &…

【C++】C++ 右值 相关常见问题

【C】C 右值 相关常见问题 文章目录 【C】C 右值 相关常见问题1.介绍一下左值引用和右值引用1.1左值和左值引用1.2右值和右值引用 2.左值引用与右值引用比较3.左值引用的使用场景4. move语义5.完美转发 C 11 关于右值相关概念: 在 C 中,右值是指仅作为表…

【3DsMAX】从零开始建房(3)

目录 步骤 1. 统一材质 2. 制作椅子 3. 制作货物盒 步骤 1. 统一材质 选中所有的模型,按下M键打开材质编辑器 选择精简材质编辑器 选择64示例窗 可以随便选中一个材质球,然后将材质指定给选定对象 然后可以修改线框颜色为黑色 2. 制作椅子 激活…

【力扣周赛】第348场周赛

【力扣周赛】第348场周赛 2716. 最小化字符串长度题目描述解题思路 2717. 半有序排列题目描述解题思路 2718. 查询后矩阵的和题目描述解题思路 2719. 统计整数数目题目描述解题思路 2716. 最小化字符串长度 题目描述 描述:给你一个下标从 0 开始的字符串 s &#…

30个接口自动化测试面试题,看过的已经在上班了

1. 什么是接口自动化测试? 答:接口自动化测试是指使用自动化工具对接口进行测试,验证接口的正确性、稳定性和性能等方面的指标。2. 为什么要进行接口自动化测试? 答:接口自动化测试可以提高测试效率,减少人…

STM32 实现简单定时任务调度器,动态创建任务,两种思路实现跑马灯

代码实现和硬件没关系,所以并不限于STM32,Arduino 之类的其他地方也能用,只要有一个能获取时间的函数就行,或者说,只要有一个会随着时间自动增加的变量就行,时间单位无所谓,所以确实想的话&…

地图实火!断货加印,限时折扣抢购通道开启

(关注公众号点击图片三折购买《社交泛娱乐出海作战地图》) 实火! 融云自制《社交泛娱乐出海作战地图》 “WICC 泛娱乐出海嘉年华”最热单品 关注【融云全球互联网通信云】了解更多 《出海作战地图》线下首发立刻引爆现场,“如…

分布式数据库-事务一致性

version: v-2023060601 author: 路__ 一、什么是“强一致性” 分布式数据库的“强一致性”应该包含两个方面:serializability(串行) and linearizability(线性一致),上述图为“Highly Available Transact…

Tomcat优化与动静分离

Tomcat优化 一、Tomcat配置文件参数优化二、负载均衡,动静分离七层代理配置四层代理配置 Tomcat 默认安装下的缺省配置并不适合生产环境,它会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面&…

二、tienchin健身系统技术点复现-注解限流

二、tienchin健身系统技术点复现-注解限流 在上一章节写到编写 lua 脚本。基本的配置类都已经创建,下面创建一个 请求获取IP的工具类和全局异常处理即可。 1、创建工具类IpUtils package com.yangjiapo.rate_limiter.utils;import javax.servlet.http.HttpServlet…