今天从冗余存储、存取策略、数据错误和恢复三个方面,聊聊HDFS的存储原理。

【冗余存储】
在HDFS中,文件是分成若干个块存储的,每个块可多副本存储,默认为三副本,还可设置为更多副本存储,这样的冗余存储有以下三个优点。
1、提高访问速度
由于多副本存储,可以进行并行访问,当多个程序读取一个文件时,可并行从不同机器读取数据,提高数据的访问速度
2、容易检查数据错误
如果有一个副本出错,由于还有其他副本做参照,很容易发现错误,并基于参照副本进行恢复。
3、数据可靠性
当一台机器宕机,磁盘坏掉,并不会导致数据丢失,不影响数据的正常访问。
【数据存取策略】
1、数据存储策略
上文中提到文件在HDFS中是分成若干块存储的,为了保证数据可靠性,若是有一个块的第一个副本存储在机架1的某个数据节点,则第二个副本会存储在机架2的某个数据节点,如果有更多机架,第三个副本,可存储在第三个机架的某个数据节点,如果只有两个机架,那第三个副本可随机存储。如果一个机架断电,也不影响数据访问,保证数据可靠性。
2、数据读取策略
HDFS数据读取遵守就近原则,HDFS客户端会读取离自己最近的数据节点的副本。具体由API机制,通过API可确定数据节点和客户端所属的机架ID,从而可找到离客户端最近的数据节点。
当客户端读取数据时,先从名称节点获取到元数据,名称节点会告诉客户端这个文件,分成多少个块,每个块的副本,放在哪个数据节点,利用API,可知道每个副本所在的机架ID,客户端会优先从与自己相同机架的数据节点读取数据,若没有与自身在同一机架的数据节点,则随机从其他数据节点访问。
【数据错误和恢复】
从三个方面来谈数据错误和恢复
1、名称节点数据错误和恢复
在Hadoop 1.0中,由于名称节点是单机版,如果名称节点宕机,是需要等名称节点恢复,才能正常提供服务。在Hadoop 2.0中,名称节点支持集群和热备功能,当主节点宕机,从节点可立马接管并提供服务,保证了名称节点的高可用性。
2、数据节点错误和恢复
数据节点通过RPC机制,会定期向名称节点汇报,如果超过一定时间没有检测到数据节点的心跳,则判定为数据节点宕机。如果是服务器磁盘坏掉,重新更换新的服务后,其会根据元数据重新进行恢复数据。
3、数据错误和恢复
具体数据块出现错误怎么办?如何检测数据错误呢?具体用的是校验码技术,当数据块在写入数据节点时,就会计算得到校验码,当读取数据时,又会重新进行一次计算,得到新的校验码,新的校验码和与与原来的校验码比较,如果不一样,说明数据已经发生了错误,这时可通过其他数据节点的副本进行恢复。


还没有评论,来说两句吧...