HDFS设计思想和相关概念_hdfs块的设计思想

HDFS有一下特点:

  • HDFS是一个高度容错性的系统,适合部署在廉价的机器上的分布式文件系统。
  • HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
  • HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。
  • HDFS也是一个易于扩展的分布式文件系统

2、HDFS设计目标

a、大规模数据集

HDFS用来处理很大的数据集。HDFS上的文件,大小一般都在GB至TB。因此同时,HDFS应该能提供整体较高的数据传输带宽,能在一个集群里扩展到数百个节点。一个单一的HDFS实例应该能支撑千万计的文件。目前在实际应用中,HDFS已经能用来存储管理PB级的数据了。

b、硬件错误

我们应该知道,硬件组件发生故障是常态,而非异常情况。HDFS可能由成百上千的服务器组成,每一个服务器都是廉价通用的普通硬件,任何一个组件都有可能一直失效,因此错误检测和快速、自动恢复是HDFS的核心架构目标,同时能够通过自身持续的状态监控快速检测冗余并恢复失效的组件。

c、流式数据访问

流式数据,特点就是,像流水一样,不是一次过来而是一点一点“流”过来,而处理流式数据也是一点一点处理。

HDFS的设计要求是:能够高速率、大批量的处理数据,更多地响应"一次写入、多次读取"这样的任务。在HDFS上一个数据集,会被复制分发到不同的存储节点中。而各式各样的分析任务多数情况下,都会涉及数据集中的大部分数据。为了提高数据的吞吐量,Hadoop放宽了POSIX的约束,使用流式访问来进行高效的分析工作

d、简化一致性模型

HDFS应用需要一个“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变了。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。MapReduce应用或网络爬虫应用都非常适合这个模型。目前还有计划在将来扩充这个模型,使之支持文件的附加写操作。

e、移动计算代价比移动数据代价低

一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在之处显然更好,HDFS提供给应用这样的接口。

f、可移植性

HDFS在设计时就考虑到平台的可移植性,这种特性方便了HDFS作为大规模数据应用平台的推广。

3、HDFS的优缺点

通过上述的介绍,我们可以发现HDFS的优点是:

  • a、高容错性:数据自动保存多个副本,副本丢失后,会自动恢复。
  • b、适合批处理:移动计算而非数据、数据位置需要暴露给计算框架。
  • c、适合大数据处理:GB、TB、甚至PB级数据、百万规模以上的文件数量,1000以上节点规模。
  • d、流式文件访问:一次性写入,多次读取;保证数据一致性。
  • e、可构建在廉价机器上:通过多副本提高可靠性,提供了容错和恢复机制。

而HDFS同样有自己的缺点:

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

HDFS的设计目标有一点是:处理大型数据集,高吞吐率。这势必要以高延迟为代价的。因此HDFS不适合处理一些用户要求时间比较短的低延迟应用请求。

2)不适合小文件存取

一是因此存取大量小文件需要消耗大量的寻地时间(比如拷贝大量小文件与拷贝同等大小的一个大文件) 。

二是因为namenode把元信息存储在内存中,一个节点的内存是有限的。一个block元信息的内存消耗大约是150 byte。而存储1亿个block和1亿个小文件都会消耗掉namenode 20GB内存,哪个适合?当然是1亿个block(大文件)更省内存。

3)不适合并发写入、文件随机修改

HDFS上的文件只能有一个写者,也仅仅支持append操作,不支持多用户对同一文件的写操作,以及在文件任意位置进行修改。

二、HDFS设计思想

现在想象一下这种情况:有四个文件 0.5TB的file1,1.2TB的file2,50GB的file3,100GB的file4;有7个服务器,每个服务器上有10个1TB的硬盘。

在存储方式上,我们可以将这四个文件存储在同一个服务器上(当然大于1TB的文件需要切分),我们需要使用一个文件来记录这种存储的映射关系吧。用户是可以通过这种映射关系来找到节点硬盘相应的文件的。那么缺点也就暴露了出来:

第一、负载不均衡。因为文件大小不一致,势必会导致有的节点磁盘的利用率高,有的节点磁盘利用率低。

第二、网络瓶颈问题。一个过大的文件存储在一个节点磁盘上,当有并行处理时,每个线程都需要从这个节点磁盘上读取这个文件的内容,那么就会出现网络瓶颈,不利于分布式的数据处理。

我们来看看HDFS的设计思想:以下图为例,来进行解释。

HDFS将50G的文件file3切成多个Block(存储块),每一个Block的大小都是固定的,比如128MB,它把这多个数据块以多副本的行式存储在各个节点上 ,再使用一个文件把哪个块存储在哪些节点上的映射关系存储起来。有了这样的映射关系,用户读取文件的时候就会很容易读取到。每个节点上都有这样的Block数据,它会分开网络瓶颈,利于分布式计算,解决了上面的第二个问题。因为每个块的大小是一样的,所以很容易实现负载均衡,解决了上面的第一个问题。

三、HDFS相关概念

1、块(Block)概念

在我们熟知的Windows、Linux等系统上,文件系统会将磁盘空间划分为每512字节一组,我们称之为"磁盘块",它是文件系统读写操作的最小单位。而文件系统的数据块(Block)一般是磁盘块的整数倍,即每次读写的数据量必须是磁盘块的整数倍。

在传统的文件系统中,为了提高磁盘的读写效率,一般以数据块为单位,而不是以字节为单位,比如机械硬盘包含了磁头和转动部件,在读取数据时有一个寻道的过程,通国转动盘片和移动磁头的位置,来找到数据在机械硬盘中的存储位置,然后才能进行读写。在I/O开销中,机械硬盘的寻址时间时最耗时的部分,一旦找到第一条记录,剩下的顺序读取效率是非常高的,因此以块为单位读写数据,可以把磁盘寻道时间分摊到大量数据中。

HDFS同样引入了块(Block)的概念,块是HDFS系统当中的最小存储单位,在hadoop2.0中默认大小为128MB。在HDFS上的文件会被拆分成多个块,每个块作为独立的单元进行存储。多个块存放在不同的DataNode上,整个过程中 HDFS系统会保证一个块存储在一个数据节点上 。但值得注意的是 如果某文件大小或者文件的最后一个块没有到达128M,则不会占据整个块空间 。

当然块大小可以在配置文件中hdfs-default.xml中进行修改(此值可以修改)

<property>
  <name>dfs.blocksize</name>
  <value>134217728</value>
  <description>默认块大小,以字节为单位。可以使用以下后缀(不区分大小写):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)</description>
</property>
 
<property>
  <name>dfs.namenode.fs-limits.min-block-size</name>
  <value>1048576</value>
  <description>以字节为单位的最小块大小,由Namenode在创建时强制执行时间。这可以防止意外创建带有小块的文件可以降级的大小(以及许多块)的性能。</description>



还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!


王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。


对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!


【完整版领取方式在文末!!】


***93道网络安全面试题***


![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)








![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)





![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)





内容实在太多,不一一截图了


### 黑客学习资源推荐


最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


😝朋友们如果有需要的话,可以联系领取~

#### 1️⃣零基础入门


##### ① 学习路线


对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。


![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)


##### ② 路线对应学习视频


同时每个成长路线对应的板块都有配套的视频提供:


![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)


#### 2️⃣视频配套工具&国内外网安书籍、文档


##### ① 工具


![](https://img-blog.csdnimg.cn/img_convert/d3f08d9a26927e48b1332a38401b3369.png#pic_center)


##### ② 视频


![image1](https://img-blog.csdnimg.cn/img_convert/f18acc028dc224b7ace77f2e260ba222.png#pic_center)


##### ③ 书籍


![image2](https://img-blog.csdnimg.cn/img_convert/769b7e13b39771b3a6e4397753dab12e.png#pic_center)

资源较为敏感,未展示全面,需要的最下面获取

![在这里插入图片描述](https://img-blog.csdnimg.cn/e4f9ac066e8c485f8407a99619f9c5b5.png#pic_center)![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png#pic_center)


##### ② 简历模板


![在这里插入图片描述](https://img-blog.csdnimg.cn/504b8be96bfa4dfb8befc2af49aabfa2.png#pic_center)

 **因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆**

  



  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. MapReduce MapReduce是一种用于处理大规模数据集的编程模型,其核心思想是将数据集分割成小,然后并行处理这些小,最后将结果合并起来。MapReduce可以应用于各种不同的数据处理任务,包括数据清洗、ETL、日志分析、搜索等。 MapReduce的实现需要两个阶段:Map阶段和Reduce阶段。在Map阶段,数据被分割成小并传递给多个Map任务进行处理。Map任务通常会将原始数据转换成键值对的形式,并将它们传递给Reduce任务。在Reduce阶段,Map任务输出的键值对被合并起来,生成最终的结果。在MapReduce中,数据的处理被分为多个阶段,每个阶段都可以并行执行。 2. Spark Spark是一款先进的分布式计算系统,它提供了一种高效的、可扩展的计算模型。Spark中最重要的概念之一是弹性分布式数据集(RDD),它是一种分布式内存抽象,可以让Spark在多个节点上并行处理数据。Spark支持各种不同的数据源和格式,包括HDFS、HBase、Cassandra和S3等。 Spark的主要优势是其速度和可扩展性。通过使用内存计算和数据分区技术,Spark可以在实时或近实时的条件下处理海量数据。Spark还支持流处理、机器学习和图形计算等高级应用。 3. Flink Flink是一款新一代的流处理引擎,它支持批处理和流处理,提供了一种高效的、可扩展的计算模型。Flink中最重要的概念之一是数据流(DataStream),它是一种连续的数据流,可以让Flink在多个节点上并行处理数据。与Spark不同,Flink支持更灵活的窗口处理和复杂的事件处理。 Flink的主要优势是其处理能力和流处理的能力。通过使用流处理技术,Flink可以在实时或近实时的条件下处理数据,并且能够处理非常大的数据集。Flink还支持复杂的事件处理和实时机器学习等高级应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值