大数据技术主要要解决的问题的是大规模数据的计算处理问题, 那么首先要解决的就是大规模数据的存储问题. 大规模数据存储要解决的核心问题有三个方面:
数据存储容量的问题, 既然大数据要解决的是数以 PB 计的数据计算问题, 而一般的服务器磁盘容量通常 1-2TB, 那么如何存储这么大规模的数据.
数据读写速度的问题, 一般磁盘的连续读写速度为几十 MB, 以这样的速度, 几十 PB 的数据恐怕要读写到天荒地老.
数据可靠性的问题, 磁盘大约是计算机设备中最易损坏的硬件了, 在网站一块磁盘使用寿命大概是一年, 如果磁盘损坏了, 数据怎么办?
在大数据技术出现之前, 人们就需要面对这些关于存储的问题, 对应的解决方案就是 RAID 技术.
从 RAID 说起
RAID(独立磁盘冗余阵列)技术主要是为了改善磁盘的存储容量, 读写速度, 增强磁盘的可用性和容错能力. 目前服务器级别的计算机都支持插入多块磁盘(8 块或者更多), 通过使用 RAID 技术, 实现数据在多块磁盘上的并发读写和数据备份.
常用 RAID 技术有以下几种, 如图所示.
假设服务器有 N 块磁盘.
RAID0
数据在从内存缓冲区写入磁盘时, 根据磁盘数量将数据分成 N 份, 这些数据同时并发写入 N 块磁盘, 使得数据整体写入速度是一块磁盘的 N 倍. 读取的时候也一样, 因此 RAID0 具有极快的数据读写速度, 但是 RAID0 不做数据备份, N 块磁盘中只要有一块损坏, 数据完整性就被破坏, 所有磁盘的数据都会损坏.
RAID1
数据在写入磁盘时, 将一份数据同时写入两块磁盘, 这样任何一块磁盘损坏都不会导致数据丢失, 插入一块新磁盘就可以通过复制数据的方式自动修复, 具有极高的可靠性.
RAID10
结合 RAID0 和 RAID1 两种方案, 将所有磁盘平均分成两份, 数据同时在两份磁盘写入, 相当于 RAID1, 但是在每一份磁盘里面的 N/2 块磁盘上, 利用 RAID0 技术并发读写, 既提高可靠性又改善性能, 不过 RAID10 的磁盘利用率较低, 有一半的磁盘用来写备份数据.
RAID3
一般情况下, 一台服务器上不会出现同时损坏两块磁盘的情况, 在只损坏一块磁盘的情况下, 如果能利用其他磁盘的数据恢复损坏磁盘的数据, 这样在保证可靠性和性能的同时, 磁盘利用率也得到大幅提升.
在数据写入磁盘的时候, 将数据分成 N-1 份, 并发写入 N-1 块磁盘, 并在第 N 块磁盘记录校验数据, 任何一块磁盘损坏(包括校验数据磁盘), 都可以利用其他 N-1 块磁盘的数据修复.
但是在数据修改较多的场景中, 任何磁盘修改数据都会导致第 N 块磁盘重写校验数据, 频繁写入的后果是第 N 块磁盘比其他磁盘容易损坏, 需要频繁更换, 所以 RAID3 很少在实践中使用.
RAID5
相比 RAID3, 更多被使用的方案是 RAID5.
RAID5 和 RAID3 很相似, 但是校验数据不是写入第 N 块磁盘, 而是螺旋式地写入所有磁盘中. 这样校验数据的修改也被平均到所有磁盘上, 避免 RAID3 频繁写坏一块磁盘的情况.
RAID6
如果数据需要很高的可靠性, 在出现同时损坏两块磁盘的情况下(或者运维管理水平比较落后, 坏了一块磁盘但是迟迟没有更换, 导致又坏了一块磁盘), 仍然需要修复数据, 这时候可以使用 RAID6.
RAID6 和 RAID5 类似, 但是数据只写入 N-2 块磁盘, 并螺旋式地在两块磁盘中写入校验信息(使用不同算法生成).
在相同磁盘数目 (N) 的情况下, 各种 RAID 技术的比较如下表所示.
RAID 技术有硬件实现, 比如专用的 RAID 卡或者主板直接支持, 也可以通过软件实现, 在操作系统层面将多块磁盘组成 RAID, 在逻辑视作一个访问目录. RAID 技术在传统关系数据库及文件系统中应用比较广泛, 是改善计算机存储特性的重要手段.
RAID 技术只是在单台服务器的多块磁盘上组成阵列, 大数据需要更大规模的存储空间和访问速度. 将 RAID 技术原理应用到分布式服务器集群上, 就形成了 Hadoop 分布式文件系统 HDFS 的架构思想.
来源: http://stor.51cto.com/art/201807/578016.htm