原文链接: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. 【刷题】BZOJ 1030 [JSOI2007]文本生成器

    Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生 ...

  2. 【BZOJ1226】学校食堂(动态规划,状态压缩)

    [BZOJ1226]学校食堂(动态规划,状态压缩) 题面 BZOJ 洛谷 题解 发现\(b\)很小,意味着当前这个人最坏情况下也只有后面的一小部分人在他前面拿到饭. 所以整个结果的大致顺序是不会变化的 ...

  3. 【BZOJ4522】密匙破解(Pollard_rho)

    [BZOJ4522]密匙破解(Pollard_rho) 题面 BZOJ 洛谷 题解 还是\(Pollard\_rho\)的模板题. 呜... #include<iostream> #inc ...

  4. 最长上升子序列nlogn算法

    LIS问题是经典的动态规划问题,它的状态转移相信大家都很熟悉: f[i] = f[k] + 1  (k < i 且 A[k] < A[i]) 显然这样做复杂度是O(n^2) 有没有更快的算 ...

  5. CF932E Team Work——第二类斯特林数

    题解 n太大,而k比较小,可以O(k^2)做 想方设法争取把有关n的循环变成O(1)的式子 考虑用公式: 来替换i^k 原始的组合数C(n,i)一项,考虑能否和后面的系数分离开来,直接变成2^n处理. ...

  6. Fox

    Portal --> broken qwq Description 有n只狐狸在一起聚餐,每只狐狸都有一个年龄.按照狐狸们的习惯,坐在一起的两只狐狸的年龄之和需要是质数.现在这些狐狸们在一些圆桌 ...

  7. CVPR 2014 ObjectnessBING 原文翻译

    BING: Binarized Normed Gradients for Objectness Estimation at 300fps Ming-Ming Cheng, Ziming Zhang, ...

  8. python创建多维列表

    By francis_hao    Mar 24,2018   "*"操作符可以用于列表,表示将列表内容重复n次.如下,   但是当列表内容是列表的时候就出问题了,如果我只是修改多 ...

  9. vue2.0 安装及项目搭建(一)

    基本环境安装 1.安装node:从node.js官网下载并安装node.测试:win+R(打开命令行)-------输入cmd-------敲入node -v.如果出现相应版本号,即安装成功: 2.测 ...

  10. 【OpenCV】特征检测器 FeatureDetector

    <SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html OpenCV提供FeatureDetector实现特征 ...