Hdfs-Raid tools文档翻译

来源:互联网 发布:nba纳什数据 编辑:程序博客网 时间:2024/05/26 05:53

      国庆放假7天,花了二天时间搬家,花了二天时间去绍兴,接下来这三天用来学习,这几周比较忙,加班比较多,手头上有几个task,因此没有及时更新blog,但是不管再忙,都一定要花时间来学习,上周javaone大会结束了,看了毕玄等同学的分享,java的性能方面很多公司还在研究当中,特别GC管理这块,hadoop书出了第二版,网上已经有下载了,这个月hadoop world也要举办,基本上是跟hadoop相关的session,taobao的TFS开源,比较靠谱的东西,同时也适合于存储小文件,这是由hdfs有区别的地方,接下来抽空看看,加深对DFS的理解和感悟。

Hdfs-Raid tools文档翻译

相关链接:
https://issues.apache.org/jira/browse/MAPREDUCE-1969
https://issues.apache.org/jira/browse/MAPREDUCE-2036

在数据块存储时采用RAID5RAID6来代替triplication scheme(3副本方案),原先的存储只有1 /3可用,因为一个block有三个副本,如果副本设置更多,那么存储的使用将更低,为了提高存储容量的使用,RAID将采用检验块来得到丢失的数据块,而不是通过副本来得到,这样可以减少需要附加的存储容量。

RAID6来存储,将为4个数据块产生2个附近的校验块,当4个中有2个数据块丢失,都是可以恢复回来的,但是如果2个以上的数据块丢失,就无法恢复,这是RAID6不好的地方。

Raid5:

 

Raid6:

 

设计理论:

 

 

 


组策略问题
当一个文件的数据很大时,即大于4个数据块时,相当好处理,就按4个为一组来计算出校验块,然后剩下的数据块组合一组来计算出校验块。
最难解决的问题,就是小文件,如果把每个小文件看成一组,这样就浪费了很多空间。

 

 


如果把多个文件看成一个组,问题又来了,因为文件之间是独立,当有文件删除时,其数据块不能删除,不然同组中其他文件的数据块将无法被恢复。
他们对yahoo7个集群进行了统计,
80%的空间是存储小于8G的文件。
75%以上的空间存储大于8G的文件目录。
因此采用将一个目录作为一个组,来计算校验数据块。


当前设计:
提供一个RAID Tool工具给客户端使用,支持以目录作为组来进行RAID。提供计算校验数据与恢复数据二种功能。
采用MR-job来计算校验数据块。
客户端访问数据时,如果数据发生错误或丢失,就可以通过RAID tool进行在线恢复。就是对FSInputStream再包装一层,提供恢复丢失数据块的功能。

 

 

 

当客户端读HDFS时,发生错误。

RAIDFileSyste,包装好FileInputStream

 

离线错误检测

NameNodeFsck检测错误的数据块,然后利用MRjob来对其进行恢复。


错误处理可以在线恢复,也可以提供离线恢复。
在当前的hadoop的数据块的副本数目都是由ReplicationMonitor线程来离线检测和恢复的。

提高与改进:
校验数据存储格式
影响到NN的资源和空间使用。
有隔离,密集和稀疏。

 


可靠性问题
数据块及校验数据的存储位置选择比3副本策略复杂。

数据恢复的性能

当某个块发生冲突,可以直接重写这个数据块就可以,并不要去重写整个文件。