Hdfs-Raid tools文档翻译

      国庆放假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

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

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

Raid5:

 

Raid6:

 

设计理论:

 

 

 


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

 

 


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


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

 

 

 

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

RAIDFileSyste ,包装好 FileInputStream

 

离线错误检测

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


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

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

 


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

数据恢复的性能

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

你可能感兴趣的:(hadoop,存储,文档,tools,behavior,raid5)