大数据交流群QQ:494721467

HDFS容错:

如何使文件体统能够容忍节点故障,并且不丢失任何的数据也就是HDFS的容错机制


1、心跳机制:

namenode 和datanode是维护心跳的检测。可能网络故障,导致namenode接收不到datanode的心跳包,namenode就不会将任何新的I/O操作派发给那个


Datanode,所以datanode上的数据是无效的。namenode会检测到文件块的副本数目小于设置值,如果小于就自动开始复制新的副本并分发到其他的datanode


节点上。


2、检查文件的块的完整性

HDFS会检索到文件或者某个节点块的大小是否一致,不一致,会从其他的Datanode节点上获取该快的副本



3、集群的负载均衡

节点的丢失或者增加会使数据分布不均,当某个Datanode节点的空闲空间大于一个临界点值时,HDFS会自动从其他节点把数据迁移过来


4、namenode上的FSlmage 和Edit log文件

FSlmage 和Edit log文件是HDFS上的核心数据结构。当他们损坏HDFS将会失效


5、文件的删除

删除一个文件,并不会马上从namenode上移动,设置的时间由hdfs-site.xml问价的配置,fs.trash.interval决定设置时间(时间单位为秒)


-------------------------------------------------------------------------


HDFS读取文件和写入文件

1、hdfs会将文件的切片成块的存储到datanod各个节点中,而文件的数据块的布局是由namenode和hdfs-site.xml中配置dfs.replication一起决定的。


dfs.replication表示该文件在hdfs中的副本数,它默认为3。


2、hdfs客户端想要读取文件,首先要访问namenode,并告诉它要读取的文件,在这之前,hdfs会对客户的身份信息进行验证:一种是通过信任的客户端,


由其指定的用户名,另一种是通过kerberos等强制验证机制来完成。访问文件要检查文件的所有者和访问权限。如果文件存在用户对它有访问权限,


nanmenode会提供文件的信息及块的datanode列表。hdfs客户端就可以访问最合适的datanode,直到文件hdfs动关闭文件流


写入文件:

hdfs客户端通过hdfs相关的api发送请求,打开一个要写入的文件,这个请求将会被namenode接收到,并建立该文件的元数据,但新建的文件元数据和任何


数据块没有关联。客户端收到提示成功打开文件时,就开始往里面写数据,当客户端将数据写入流时。数据会被拆成数据包,并将数据包保存在内存的队


列中。客户端有个独立线程,它从队列中读取数据包,并向namenode请求一组datanode列表,以便写入下个数据块的多个副本。hdfs直接连接到列表,从


而建立了数据块的管道,写入到磁盘中。