HDFS RAID实现方案(转)
原文链接: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目前支持Raid5和RS(Raid6可用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数据并返回给应用。
- RaidShell:DRFS管理工具,可人工触发文件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实现方案(转)的更多相关文章
- MySQL数据库Raid存储方案
作为一名DBA,选择自己的数据存储在什么上面,应该是最基本的事情了.但是很多DBA却容易忽略了这一点,我就是其中一个.之前对raid了解的并不多,本文就记录下学习的raid相关知识. 一.RAID的基 ...
- HDFS ErasureCode方案对比
HDFS目前存储文件的方案是将一个文件切分成多个Block进行存储,通常一个Block 64MB或者128MB,每个Block有多个副本(replica),每个副本作为一个整体存储在一个DataNod ...
- hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案
我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...
- 简单描述RAID级别:
简单描述RAID级别: RAID 0 是俩盘一起读写,如果一个坏了那么数据全丢失: RAID 1是一块写,一块用来备份,坏一块无所谓: RAID 2 ,3 ,4 不常用: 最常用的就是RAID 5和R ...
- Hadoop HA方案调研
原文成文于去年(2012.7.30),已然过去了一年,很多信息也许已经过时,不保证正确,与Hadoop学习笔记系列一样仅为留做提醒. ----- 针对现有的所有Hadoop HA方案进行调研,以时间为 ...
- RAID和LVM磁盘阵列
RAID磁盘冗余阵列 CPU的处理性能保持着高速增长,Intel公司在2017年最新发布的i9-7980XE处理器芯片更是达到了18核心36线程.但与此同时,硬盘设备的性能提升却不是很大,因此逐渐成为 ...
- RAID与LVM磁盘阵列技术
RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列) RAID概念: RAID技术通过把多个硬盘设备组合成一个容量更大.安全性更好的磁盘阵列,并把数据 ...
- Raid分类说明 (from mongodb权威指南)
RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列,旧称Redundant Array of InexpensiveDisk,廉价磁盘冗余阵列) 是一种 ...
- Linux RAID 磁盘管理
Linux RAID 磁盘管理 RAID工作模式介绍:https://www.cnblogs.com/xiangsikai/p/8441440.html 本章主要讲解 Linux下 RAID5 与 R ...
随机推荐
- 洛谷 P2053 [SCOI2007]修车 解题报告
P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...
- Linux必知必会——od命令
1.功能 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符.od命令系统默认的显示方式是八进制,名称源于Oc ...
- HDU 5489 二分 LIS
Removed Interval Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 简单shell 编程
简单shell编程 by dreamboy #!/bin/bash while true do echo clear echo echo " 系统维护菜单 " echo &qu ...
- Codeforces 895.D String Mark
D. String Mark time limit per test 4 seconds memory limit per test 256 megabytes input standard inpu ...
- laravel 5.1 Eloquent常见问题
1.新增一条记录以及判断是否新增成功 $instance = XxxModel::create(['a' => 1, 'b' => 2]); if ($instance->exist ...
- SpringCloud学习(1)——SpringCloud概述
微服务架构: 微服务架构是一种架构模式或者说是一种架构风格, 他提倡将单一应用程序划分成一组小的服务, 每个服务运行在其独立的进程中, 服务之间互相协调,互相配合, 为用户提供最终价值.服务之间采用轻 ...
- 树上的构造 树分治+树重心的性质 Codeforces Round #190 (Div. 2) E
http://codeforces.com/contest/322/problem/E E. Ciel the Commander time limit per test 1 second memor ...
- 2017 Multi-University Training Contest - Team 1
1006(6038) 就是对a,b分别求循环节,先统计一下b中所有长度循环节的出现次数,再对a求循环节时只要满足: a的循环节长度 % b的循环节长度=0,那么这个b的循环节就可以计入答案,尼玛只要是 ...
- 760A 水
LINK 第一天单独一行 其余7天一行 问某月有多少行 ...... /** @Date : 2017-04-02-21.35 * @Author : Lweleth (SoungEarlf@gmai ...