网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
HDFS(Hadoop Distributed File Systemctl)是一个文件系统,用于储存文件,通过目录树来定位为文件。它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
- HDFS优缺点:
优点:1.高容错性
-
数据自动保存多个副本。通过增加副本的形式提高容错性。
-
某一个副本丢失后,可以自动恢复。
-
适合处理大数据。
-
数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据。
-
文件规模:能够处理百万规模以上的文件数量,数量相当之大。
-
可构建在廉价机器上,通过多副本机制,提高可靠性。
缺点:1.不适合低延迟时数据访问,比如我无法处理毫秒级的储存数据。
-
无法高效的对大量小文件进行存储。
-
储存大量小文件会占用NameNode大量的内存来储存文件目录和快信息,而NameNode的内存是有限的。
-
小文件存储的寻址时间会超过读取时间,违反HDFS的设计目标。
-
不支持并发写入、文件会随即修改
-
一个文件只能有一个写,不允许多个线程同时写
-
仅支持数据追加(append),不支持文件的随即修改
-
HDFS组成构架
-
Namenode(nn)就是master,是一个主管者、管理者。
-
管理HDFS的名称空间
-
配置副本策略
-
管理数据块(block)映射信息
-
Datanode就是slave。Nameenode下达命令,datanode执行实际的操作
-
存储实际的数据块
-
执行数据块的读/写操作
-
Client就是客户端。客户端是一个抽象的概念,无论是命令行还是通过API还是web界面来操作都是客户端。
-
文件切分。文件上传HDFS的时候,client将文件切分成一个个Block,然后进行上传
-
与NameNode交互,获取文件的位置信息
-
与DataNode交互,获取或写入数据
-
Client提供一些命令来管理HDFS,比如NameNode格式化
-
Client可以通过一些命令来访问HDFS ,比如对HDFS增删改查操作
-
Secondary NameNode并非NameNode的热备。当NameNode挂掉的时候,并不能马上替换NameNode并提供服务
-
辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode
-
在紧急情况下,可辅助回复NameNode
-
HDFS文件块大小
HDFS中的文件在物理上是分块存储(Block)块的大小可以通过配置参数(dfs。Blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M。
寻址时间为传输时间的1%时,则为最佳状态。因此,传输时间=10ms/0.01=1000ms=1s而目前磁盘传输速率普遍为100MB/s。
-
HDFS读的流程
-
读取数据流程
-
客户端通过Distributed File System向NameNode请求下载文件,NameNode通过查询元数据,找到文件所在的DataNode地址
-
挑选一台DataNode(就近原则,然后随机)服务器。请求读取数据
-
DataNode开始数据传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做实验)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
项目、大纲路线、讲解视频,并且后续会持续更新**