HDFS的工作原理
-
HDFS存储理念是用最简单的硬件实现最安全、难度高的人不是文件系统(高容错低成本),HDFS 认为机起故障是一种常态,所以在设计的时候充分考虑到了单个磁盘,机器或者文件出现故障等问题。
-
HDFS的容错机制
- 结点失败监测机制:DN 每3秒向 NN 发送心跳信号,10分钟收不到则认为结点宕机
- 通信故障监测机制:只要收到了数据,接收方就会发送确认码
- 数据错误监测机制:在传输数据时,同时发送总和校验码
用户写入流程
- client 把文件做一个切分,然后指定副本数,向 NN 发送写请求,
- NN里面记并存储了DN 上的元数据,包含(DN的列表和,和数据块),NN 根据客户端和DN的实际情况,返回DN的列表(按距离排序),
- 客户端向DN 发送block数据块了,按照packet 发送数据,每个64k,并发送DN 列表,让DN知道存储在哪些DN上。
- 第一个DN接收到数据后,就一个点一个点的往后同步数据。如果第一个故障,就发往第二个,再开始同步
- 第一个DN接收完毕后,向client发送一个确认码,用于避免网络故障
- 所有的DN 同步完成后,向 NN 发送数据块报告
- 最后NN 把数据存盘
按距离排序:
不同的机架上有不同的 DN
客户端想要3个副本:
但当客户端再DN 上时,第一个副本肯定再这个DN的主机上,第二个副本再不同机架上的DN上,第三个副本在和第二个副本同一个机架上的不同DN 上。NN 就会将这三个DN的列表返回给客户端(一般情况下3个DN就够了)
当客户端在外部时,第一个副本会在随机的一个机架上的随机一个DN 上,第二分在另外一个机架的随机DN上,第三个副本和第二个副本同机架的不同DN上。
如果后续还有副本的话,就都时随机的了,只对前三个有要求。
DN 如何知道NN故障了
1.结点故障
正常的DN 每隔三分钟向 NN 发送心跳信息,如果NN十分钟没有收到 DN 的信息,则认为DN 宕机
2.网络故障
DN 在收到client 的消息时会发送确认码,如果client收不到,则判断DN 挂掉,选择第二个DN
3.数据块故障
客户端在向DN发送数据的时候还会包含一个 总和校验码,DN 将block数据和总和校验码进行存储,如果总和校验码对应不上,就认为数据是不完整的,也不会向 NN 进行同步数据了。
如果DN上的数据块缺失,DN会定期向NN发送数据块的报告,NN发现DN上的数据块缺失的话,就会从本机同步列表给DN,进行更新DN列表和数据块列表。
更新DN列表和数据块列表用于库乎端的读请求
总结
- HDFS属于 Master 和Slave 结构。一个集群只有一个NameNode ,可以有多个 DataNode。
- HDFS存储机制保存了多个副本,当写入 1T 的文件时,会消耗 3T 的内存和 3T 的网络流量带宽,系统提供容错机制,副本丢失或者宕机可自动恢复,保证系统的高可用性。
- HDFS默认将文件分割成block ,然后将block按键值对的映射存储到内存中,如果小文件太多,会导致内存的负担很重
- HDFS采用的是一次写入多次读取的文件访问模型,一个文件经过创建、写入、关闭之后就不需要改变,这一假设简化了数据一致性的问题,并且让高吞吐量的数据访问成为可能。
HDFS与NFS区别
#相同点
两者的文件系统数据均能够在相关系统内的多台机器上进行数据读取和写入,都是分布式文件系统
#不同点
##NFS是通过RPC通信协议进行数据共享的文件系统,所以NFS必须在运行的同时确保RPC能够正常工作。在不同的文件进行读取和写入时,实际上是对服务端的共享文件地址进行操作,一旦服务端出现问题,那么其他所有的机器无法进行文件读取和写入,并且数据无法找回。所以NFS系统的文件其实并没有备份,并且其服务端没有做高可用处理。
##HDFS是通过数据备份进行的大数据存储文件系统。HDFS有系统备份,并且其namenode有secondnamenode进行备份处理,更加安全可靠。数据在经过多副本存储后,能够抵御各种灾难,只要有一个副本不丢失,数据就不会丢失。所以数据的安全性很高。