笔记一:hadoop之HDFS 分布式文件系统
1、特点
- 会将大文件线性切割成块(block),分散存放在机器节点中
- 单一文件的block大小一致,不同文件可以不一样,最后一个块,大小还是128M,但是内部存放的数据可能小于128M
- 为了安全机制(副本机制)
- 追加数据(append),只能尾部追加数据
- 只支持一次写入多次读取,同一时刻只有一个写入者
2、namenode 角色
- 管理DN,以及元数据(描述数据的数据)存储在内存中
- 接受客户端的读写服务
- 收集DN的信息
- 给client一些DN的信息
3、datanode角色
- 存储文件(block块)
- 向NN汇报信息(存了哪些信息以及是否存活)
- 存储block的元数据信(NN存的元数据是整个大文件的,DN存的元数据每个block块)
- 接受client的请求
4、写操作的具体实现
- 大文件线性切割成block块(client会优先计算一下大文件的block的块数,默认一个块的大小128M, block数 = 大文件/128M)
- client向NN汇报情况(block数、属主、权限、上传时间)
- client切割一个block块
- 请求block的ID和DN的地址
- NN就会将一些负载不高的DN的地址返回给client
- client已经拿到地址就会找到这个DN进行数据上传并且会做备份
- DN将block存储完毕后向NN进行汇报
5、读操作的具体实现
- client会向NN请求block的位置信息,NN掌握元数据
- NN返回block的信息给client
- client拿到block的信息之后去相应的读取block的数据(就进原则)
6、备份机制?为了安全 。如何备份?
- 如果是集群内提交:第一个block提交上传请求的服务器上;如果是集群外提交:第一个block提交负载不高的服务器上
- 第一个备份:与第一个block不同机架的随机一台服务器
- 第二个备份:存放在第一个备份的block相同机架但是不同服务器上
- 更多的副本:随机存放(默认一个block有两个备份)
7、写操作 + 备份机制 (piepline管道)
- client请求之后,NN会返回一批DN, client会与这些DN之间形成piepline管道
- 以block形式进行存储,在piepline中会将block再次细分,分成一个个的ack packet (128K),ack在管道中流淌,DN会从管道中复制一份ack存放
- DN从管道中获取数据放到本地,然后NN汇报存储情况