本文主要记录学习过程中遇到的HDFS在读写过程中会遇到的问题,以及作者自己的一些问题,有知道的小伙伴欢迎指导。
HDFS在读取文件的时候,如果其中一个块突然坏掉怎么办?
在客户端在DataNode上读取完之后,会对读取到的数据进行checksum验证(该验证就是将读取到数据和HDFS块的元数据进行校验)。如果在校验过程中发现了错误,则说明在该DataNode读取的数据不完整,可能这个DataNode坏掉了,这是客户端就会和NameNode进行通讯,告诉存在异常的DataNode,而客户端可以从拥有该block备份的其他DataNode上面重新读取文件。
当DataNode确认数据异常后,将会启动异步删除,并同时该素master更新元数据信息。若没有其余的副本,则需要通过SecondaerNameNode进行数据恢复。
HDFS在上传文件的时候,如果其中的一个DataNode突然挂掉怎么办?
在客户端上传文件的时候,客户端会先与DataNode A建立pipline通讯通道,之后DataNode A与DataNode B建立pipline通讯通道,DataNode B与DataNode C建立pipline通讯通道,至此,有客户端到A, A到B ,B 到C的通道建立完成。而在客户端的DataNode之间的通信通道,正方向是从客户端向DataNode传输文件,当DataNode接受到文件之后,需要反方向给客户端返回一个ack确认信息。
而当DataNode突然挂掉之后,客户端接收不到DataNode的ack确认信息,则客户端会通知NameNode挂掉的DataNode,NameNode则会对DataNode进行检查,若确实挂掉,则会通知其他DataNode复制副本,并将DataNode做下线处理。
提问:客户端如何判断DataNode挂掉,除了没有接收到ACK信息之后,还有其他的方法吗,只要没接收到ack信息,就是挂掉了吗?
欢迎各位指正交流
文章内容为作者学习过程中,查阅资料的自己总结,若有不当之处,还请联系作者改正,敬请不吝赐教