原文链接:http://blog.chinaunix.net/uid-20196318-id-3213700.html

分布式文件系统主要用于解决海量数据存储的问题,如Goolge、Facebook等大型互联网企业都使用分布式文件系统作为数据存储的基础 设施,并在其上构建很多服务,分布式文件系统通常采用三副本的策略来保证数据的可靠性,但随着应用数据量的不断膨胀,三副本策略为可靠性牺牲的存储空间也 越来越大,如何在不降低数据可靠性的基础上,进一步降低存储空间成本? Facebook将erasure code应用到内部HDFS集群中,该方案使用erasure code代替传统的三副本策略,在保持集群可用性不变的情况下,节省了数PB的存储空间,Facebook的实现方案(HDFS RAID)目前已贡献给开源社区。

Erasure code

如下图所示,HDFS要想容忍2个block的丢失,则需要为每个block创建3个副本,存储空间成本为数据量大小的3倍。而采用RS编码,只需要1.4倍(10个数据块、4个校验块)的存储开销,能容忍4个block的丢失。(RS的原理请自行google)

HDFS中的文件通常很大,文件有多个固定大小(64M)的block组成,block一旦写满就不会再更改,HDFS RAID以文件为单位计算校验,并将计算出来的校验block存储为一个HDFS文件。HDFS-RAID目前支持Raid5RSRaid6可用RS实现)两种编码方式,下图为副本、Raid5、RS三种方案编码的对比,其中副本方式存储空间成本最高、但能获得较高的读写效率(多副本并行服务);RS方案存储成本最低,但数据存储、恢复时计算开销较大。

DRFS总体架构(Distributed Raid File System)

  • DRFS: 应用了RAID方案后的HDFS。
  • RaidNode对 需要存储在DRFS中的文件,从HDFS DataNode中读取文件(source file)对应的数据块,并计算出校验块文件(parity file,所有的校验块组成一个HDFS文件),并将parity file存储在HDFS中);RaidNode周期性的检查所有文件对应的block数据是否丢失,如果丢失,则需重新计算以恢复丢失的block。
  • DRFS client提供访问DRFS中文件的接口,其在HDFS client接口上进行封装,当读取到已丢失的block时,透明的计算恢复的block数据并返回给应用。
  • RaidShellDRFS管理工具,可人工触发文件block检查、丢失block的恢复等。

RaidNode

为 了不影响现有的服务逻辑,DRFS采用渐进式的部署方案,可逐步的将编码应用到HDFS中的文件,用户可配置需要编码的文件的模式(如指定后缀名为 mkv、指定某个目录下的所有文件等),RaidNode根据用户的配置,从NameNode获取符合要求的文件(满足用户配置的模式,且超过指定时间没 有更新)分布信息,并从DataNode上读取文件数据块,计算出校验文件,并存储到HDFS中(用户可配置校验文件的存储位置)。

DRFS以文件为单位计算校验,将文件划分成多个Stripe,每个Stripe包含一或多个block(stripe length可配置),stripe length越小,计算出的校验数据量越小,数据恢复时的成本越高;反之,,stripe length越大,存储空间成本越高,但当block丢失,恢复时的计算和传输成 本越低 。如下图所示,6个block组成的文件,当stripe length为1和2时,校验块的情况;两者都可以容忍两个block丢失,但前者的存储开销为1.33倍,而后者的存储1.67倍;但当block丢失 时,前者需要读取6个block来恢复,而后者只需要读取3个block。

当校验数据块计算完成,且校验文件存储到HDFS后,HDFS将降低文件的副本数,以节省存储空间。另外,对于一些小的文件(block数较少),RaidNode并不会为其计算校验块,而是什么也不做,因为当文件较小时,副本方案与RS方案的存储成本开销相差不大,并不能起到节省存储空间的作用,反而降低了文件并行服务的能力,增加了block丢失时的恢复开销。

RaidNode还负责丢失块的恢复工作,它定期的检查已经应用erasue code的文件状态,确定其是否有block已经丢失(source file、parity file都需要检查),如果有block已经丢失,则其先从各个DS上获取恢复该block需要的数据,并重新计算该block。

HDFS RAID主要问题在于,parity file的数据块可能分布到跟source file数据块相同的DataNode上,这样实际上降低了系统的整体可靠性;为解决该问题,HDFS RAID提出了新的数据放置方案,已将source和parity的block数据分散到不同的DataNode,但要应用新的放置方案,需要重启NameNode的服务。

DRFS Client

用 户需要读取已经应用erasue code的方案的文件时,需要使用DRFS Client,其对HDFS Client进行了封装,并透明处理block丢失的情况;当出现Block丢失或检验错误时,DRFS Client透明的计算出丢失block的数据,并返回给用户;当用户请求完成后,DRFS Client会丢弃block的数据,该block的恢复会由RaidNode完成,或由管理员通过RaidShell手动触发恢复

参考资料:

HDFS RAID实现方案(转)的更多相关文章

  1. MySQL数据库Raid存储方案

    作为一名DBA,选择自己的数据存储在什么上面,应该是最基本的事情了.但是很多DBA却容易忽略了这一点,我就是其中一个.之前对raid了解的并不多,本文就记录下学习的raid相关知识. 一.RAID的基 ...

  2. HDFS ErasureCode方案对比

    HDFS目前存储文件的方案是将一个文件切分成多个Block进行存储,通常一个Block 64MB或者128MB,每个Block有多个副本(replica),每个副本作为一个整体存储在一个DataNod ...

  3. hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案

    我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...

  4. 简单描述RAID级别:

    简单描述RAID级别: RAID 0 是俩盘一起读写,如果一个坏了那么数据全丢失: RAID 1是一块写,一块用来备份,坏一块无所谓: RAID 2 ,3 ,4 不常用: 最常用的就是RAID 5和R ...

  5. Hadoop HA方案调研

    原文成文于去年(2012.7.30),已然过去了一年,很多信息也许已经过时,不保证正确,与Hadoop学习笔记系列一样仅为留做提醒. ----- 针对现有的所有Hadoop HA方案进行调研,以时间为 ...

  6. RAID和LVM磁盘阵列

    RAID磁盘冗余阵列 CPU的处理性能保持着高速增长,Intel公司在2017年最新发布的i9-7980XE处理器芯片更是达到了18核心36线程.但与此同时,硬盘设备的性能提升却不是很大,因此逐渐成为 ...

  7. RAID与LVM磁盘阵列技术

    RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列) RAID概念: RAID技术通过把多个硬盘设备组合成一个容量更大.安全性更好的磁盘阵列,并把数据 ...

  8. Raid分类说明 (from mongodb权威指南)

    RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列,旧称Redundant Array of InexpensiveDisk,廉价磁盘冗余阵列) 是一种 ...

  9. Linux RAID 磁盘管理

    Linux RAID 磁盘管理 RAID工作模式介绍:https://www.cnblogs.com/xiangsikai/p/8441440.html 本章主要讲解 Linux下 RAID5 与 R ...

随机推荐

  1. element-ui中单独引入Message组件的问题

    import Message from './src/main.js'; export default Message; 由于Message组件并没有install 方法供Vue来操作的,是直接返回的 ...

  2. Educational Codeforces Round 33 (Rated for Div. 2) 题解

    A.每个状态只有一种后续转移,判断每次转移是否都合法即可. #include <iostream> #include <cstdio> using namespace std; ...

  3. JAVA中的堆、栈等内存分析

    在 JAVA 中,有六个不同的地方可以存储数据 1. 寄存器( register ) 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...

  4. 【刷题】BZOJ 4566 [Haoi2016]找相同字符

    Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别为 ...

  5. 【BZOJ1458】【洛谷4311】士兵占领(网络流)

    [BZOJ1458][洛谷4311]士兵占领(网络流) 题面 BZOJ权限题,洛谷真好 Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最 ...

  6. windows主机防护

    Netsh命令-修改网络IP设置 网络管理相关函数 Windows用户相关操作 SID(安全标识符) 策略其他说明 主机防护设置 命令行添加防火墙 防火墙规则 使用SetupDI* API列举系统中的 ...

  7. Sort Integers II

    Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(n ...

  8. POJ.3087 Shuffle'm Up (模拟)

    POJ.3087 Shuffle'm Up (模拟) 题意分析 给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12. 将字符串s1和s2通过一定的变换变成s12,找到 ...

  9. 浴谷八连测R6题解(收获颇丰.jpg)

    这场的题都让我收获颇丰啊QWQ 感谢van♂老师 T1 喵喵喵!当时以为经典题只能那么做, 思维定势了... 因为DP本质是通过一些条件和答案互相递推的一个过程, 实际上就是把条件和答案分配在DP的状 ...

  10. 对于redis框架的理解(二)

    之前梳理过redis main函数主体流程 大体是 initServerConfig() -> loadServerConfig() -> daemonize() -> initSe ...