02Hadoop的HDFS
Hadoop的HDFS(Hadoop的分布式文件存储系统)
1.分布式和集中式的区别
1.集中式:单台机器,资源有限,处理任务需要消耗较大的资源;
2.分布式:多台机器,资源是总和,将任务切分,分发给每台机器执行;
2.什么是分布式文件系统
多台机器共同组建了一个文件系统;
3.分块存储
1.将某个文件按照存储块(块相当于文件的最小存储单元)的大小进行切分,切分成不同的块,将不同块存储到分布式文件系统中不同的机器上;
2.demo:
1.现在有一个1280M的A文件需要存储到hdfs上,并且hdfs中最小的存储单元(块)是128M;
2.hdfs会根据块的大小将A文件切分成10份分别存储到hdfs系统中不同的机器上;
4.副本机制
1.原理:每个块保存多个副本,并且将这些副本存储在不同的机器上;
2.作用:为了防止单点问题(比如hdfs中A、B、C三台机器,如果A机器宕机了我还可以从B或者C机器上读取我A机器上的数据);
5.主从架构:
1.主节点:NameNode:负责管理
1.作用:
1.接收客户端的读写请求
2.管理所有的从节点
3.管理元数据
存储文件的元数据如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
2.从节点:DataNode:负责干活,负责存储
1.作用:负责数据的读写
2.流程图:
3.读写流程:
a.写
1.客户端(DFSClient)向NameNode发送写的请求(客户端发送的内容:文件的信息)
2.NameNode接收客户端的请求,NameNode根据客户端的要存储的文件信息(文件大小等)以及自身情况(有多少DataNode是空闲的)进行综合考虑,即我要对你客户端的文件进行分块存储我就要考虑分成多少个块以及分块后的文件存储在哪些DataNode上(即分块后的文件存储在哪些机器上)。结合自身考虑之后NameNode将文件要存储的信息封装到一个存储表中(存储表中记录的文件被hdfs切分成多少个块,以及每个块存储在哪个DataNode上)返回给客户端;
3.NameNode自身会保存一份文件信息表即元数据(元数据保存在内存中,由于保存在内存中的数据在关机后会消失,因此引出了SecondaryNameNode(SecondaryNameNode作用:会定时的将内存中的文件信息表(元数据)保存到本地),由于客户端在后续读取这些文件的时候会问NameNode文件的存储位置,NameNode需要告诉客户端这些信息都存储在哪些地方,这样客户端才能根据这些存储的信息去具体的DataNode上读取文件,因此元数据不能丢失。
1.元数据:实质就是一些文件索引,元数据中记录了客户端要写入的文件分成了多少个块,以及这些块分别存储在DataNode上(每台机器上会启动一个DataNode)
4.SecondaryNameNode会定时的将内存中的文件信息表(元数据)保存到本地
5.客户端根据存储表的信息,选取离客户端最近的DataNode进行写操作
1.怎么选取离客户端最近的DataNode,通过网络硬件中机架(机架服务器,每台服务器就是一个机架)感知的配置可以让我当前机器感知到离我最近的机器
b.读(客户端读文件的时候需要知道分块后的每个文件块被存储哪些地方)
1.客户端向NameNode发送读的请求(客户端发送的内容:要读取的文件信息)
2.NameNode会返回文件块所在DataNode的信息,这些信息是从NameNode中的元数据中获取到的因为元数据中记录了文件的分块信息 3.客户端从DataNode中读取数据
seconderyNameNode组件
###功能:辅助NameNode管理元数据
###NameNode启动过程
1.格式化:初始化hdfs的根目录;
2.本地元数据文件fsimage(在Hadoop_home/datas/dfs/name/current/fsimage*)
3.edits:用于记录客户端对元数据的所有操作的日志文件,只要我们客户端对hdfs进行增删改查则我的元数据就会发生变化,然后就会在edits写一份日志文件用于记录当前这一操作,这个日志文件写完之后才能去改变元数据中的内容。
2.启动namenode:
1.第一次启动读取fsimage文件(fsimage文件中记录了hdfs存储了哪些文件以及这些文件存储在哪些块上),并将其加载到内存
2.读取edits文件(空的);
3.启动datanode
1.心跳机制
2.汇报
4.客户端