1.家庭成员
2.HDFS概述
1.HDFS结构
元数据就是除了文件数据之外的数据,如文件名。实际上,元数据在磁盘中也有备份,只是启动时加载到内存中。
2.HDFS运行机制
3.HDFS优缺点
- 优点:
- 缺点:
小文件越多,则元数据越多,与数量有关,与大小无关。
不能修改。
4.HDFS架构
上图中黑色虚线有问题,应该是client操作datanode。
从图中可以看出:
- 客户端向namenode请求读写服务。
- 每个datanode中的存储单元称为“块”,见下图。
- 每个块都在其他datanode中存有副本。
下图显示了HDFS的设计思想:
解读:一个文件有50G,假设被分成4个block,则每个block都有3个副本,这3个副本一定要存放在不同的节点上。假如有一个节点坏了,导致block1只有2个副本了,那系统会自动复制一份副本添加到比较空闲的节点上。
3.HDFS三种节点解读
1.NameNode(NN)
edits解读:
如果新增或删除一个文件,edits会记录对metadata的操作日志,但不会马上写入fsimage。每隔一段时间,会把edits与fsimage内容进行合并,这件fsimage中才会记录是新增了还是删除了文件。
2.SecondaryNameNode(SNN,面试会问)
1.意义
因为namenode的主要功能是接收客户端的读写服务,而合并edits会占用大量时间,这时SecondaryNameNode就可以协助namenode合并edits log。
2.合并流程
解读:
- SecondaryNameNode有可能在另外一个节点上,交付工作可能会跨节点。
- edits交付到SecondaryNameNode之前,会拷贝一份新edits,来继续它的工作。
- 在SecondaryNameNode中,edits和fsimage进行合并,完成后传回namenode,成为新的fsimage。
- SecondaryNameNode能做备份就体现在,它存放着namenode的一份合并之前的edits和fsimage的副本。但没有保存edits.new,也就说当namenode坏了,只能通过SecondaryNameNode找回大部分元数据。
- 所以尽量把这两种namenode放在不同的节点上。
3.datanode(DN)
1.意义
解读:
是namenode主动向datanode发送心跳。
2.Block副本放置策略
解读:
- 因为不同机架的电源往往不同,一台机架电源断了,机架内所有节点的文件都丢失。
- 不同机架,保证安全。
相同机架,保证速度。
4.HDFS读/写流程(面试会问)
1.读流程
解读:
- client通过DFS的open方法去请求NameNode,得到block的位置信息
- 再通过FSDataInputStream流去读每个block的副本中的一个,把这些block还原成文件
- 关闭流
2.写流程
解读:
- client用DFS的create方法请求NameNode,NameNode再返回给应该分成多少block、放在哪个DataNode上等信息
- 通过FSDataOutputStream流去把每个block的一个副本写在DataNode里,DataNode再创建线程把block的副本写到其他datanode里(client和datanode有可能很远,但是datanode间很近,这样是为了保证速度),写完的信息返回给namenode
- 关闭流
5.HDFS文件权限
解读:
不需要密码认证,不会检查你的身份是不是本人。
6.HDFS安全模式
启动HDFS时,首次进入的模式就是安全模式。尽量不要退出安全模式,会导致数据的丢失。