Hadoop-HDFS原理与容错机制
一、HDFS里的几个“角色”
客户端(Client):就是使用HDFS的人,负责发指令(读写文件)、问元数据、跟数据节点打交道。
名称节点(Namenode):整个系统的“大管家”,只负责管理文件的目录、位置等元数据,不存实际数据。
数据节点(Datanode):真正的“仓库工人”,负责存数据块,还要做备份,执行读写操作。
二、写数据(存文件)的流程
客户端发请求:告诉Namenode要存一个文件。
文件切块:文件会被切成一块一块的(默认128MB一块),如果文件小于一块,不会占满整块空间。
分配节点:Namenode决定把每个数据块存到哪些Datanode上(考虑距离、负载等)。
数据写入:客户端按顺序把数据块发给第一个Datanode,然后这个节点再传给下一个,像接力一样。
完成确认:所有副本都写好后,客户端告诉Namenode“写完了”。
三、读数据(取文件)的流程
先问元数据:客户端问Namenode“这个文件在哪儿?”
就近下载:Namenode告诉客户端数据块在哪些Datanode上,客户端会优先从离自己最近的节点(比如同一台机器或同一个机架)下载数据。
一次写入多次读取:文件一旦写完就不改了,所以读起来很快。
四、容错机制(怎么保证数据安全)
故障类型:机器坏掉、网络断掉、数据损坏(比如磁盘坏道)。
怎么发现故障:
节点故障:靠“心跳”信号,Datanode定期告诉Namenode“我还活着”,如果超时没收到,就认为它挂了。
数据损坏:每个数据块有校验码,读的时候检查,不对就报错。
读写时的容错:
写数据时,如果某个Datanode写失败,Namenode会重新分配一个节点继续写。
读数据时,如果某个副本坏了,客户端会换另一个副本读,同时通知Namenode修复。
五、副本放置策略(备份怎么放)
第一个副本:优先放在客户端所在的机器上(如果那台机器有Datanode且负载不高);如果客户端没有Datanode,就随机选一个同机架的节点。
另外两个副本:放在不同机架的不同节点上。这样即使整个机架断电,数据还能从其他机架恢复。
好处:既保证数据安全(跨机架),又减少网络传输(只跨两个机架,不是三个),读写效率高。
总结一句话:HDFS就是用一堆便宜的普通电脑,通过分工(管家管目录、工人存数据)和备份(每个数据块存三份在不同地方),实现高可靠、高吞吐的分布式文件系统。
更多推荐

所有评论(0)