大数据交流群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直接连接到列表,从
而建立了数据块的管道,写入到磁盘中。
转载于:https://blog.51cto.com/11019607/1837215