大数据存储的进化史 --从 RAID 到 Hdfs
我们都知道现在大数据存储用的基本都是 Hdfs ,但在 Hadoop 诞生之前,我们都是如何存储大量数据的呢?这次我们不聊技术架构什么的,而是从技术演化的角度来看看 Hadoop Hdfs。
我们先来思考两个问题。
在 Hdfs 出现以前,计算机是通过什么手段来存储“大数据” 的呢?
为什么会有 Hadoop Hdfs 出现呢?在 Hdfs 出现以前,计算机是通过什么手段来存储“大数据”
要知道,存储大量数据有三个最重要的指标,那就是速度,容量,容错性。速度和容量的重要性毋庸置疑,如果容量不够大,或者读取的速度不够快,那么海量数据存储也就无从谈起了。而磁盘又是计算机中很容易损坏的零件,当磁盘损坏的时候怎么办?放任数据的丢失吗,那可不行,这就有了容错性的需求。
在没有分布式存储的时代,单个磁盘容量不够怎么办?加磁盘呗。磁盘容易坏怎么办,同时用其他磁盘备份呗。就这样,独立磁盘冗余阵列( Redundant Array of Independent Disks ),简称 RAID,诞生了。
在 2000 年以前,磁盘还是很珍贵的资源,不像现在,磁盘是 PC 机中最廉价的部件。一开始 RAID 技术是为了将多个廉价的容量较小的磁盘组合起来充当一个大磁盘以节约成本,但后来人们发现这项技术也可以用在单台机器磁盘扩容上了,于是 RAID 技术开始被广泛使用。
RAID 技术将多个磁盘组合成一个逻辑扇区,对计算机而言,它会将 RAID 当作一个磁盘来处理。使用 RAID 的好处有:增强数据集成度,增强容错功能,增加处理量或容量。
另外 RAID 也有分为多个档次,标准的分法,分别是 RAID0 , RAID1 , RAID2 ,RAID3 ,RAID4 ,RAID5 , RAID6 ,每个档次都有对应的优缺点。这里就不详细介绍,这些 RAID 等级的不同主要是对 上述说到的三个数据存储要素(速度,容量,容错性)的不同取舍,各有各的应用场景。我们从上述的三个指标来看 RAID 技术。
速度:RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。
容量:可以将多个磁盘连接起来,对比以前的单个磁盘存储,RAID 将存储的量级拔高了一个台阶。但依旧有其局限性,因为 RAID 始终是放在单台机器上,机器的磁盘卡槽不可能无限增加,磁盘也不可能一直增大。
容错性:不同等级的 RAID 使用不同的数据冗余策略,保证数据的容错性。比如最简单的 RAID1 就是数据在写入磁盘时,将一份数据同时写入两块磁盘,这样任何一块磁盘损坏都不会导致数据丢失,而插入一块新磁盘就可以通过复制数据的方式自动修复,具有极高的可靠性。为什么会有 Hadoop Hdfs 出现
最直接是原因是 Google 三篇大数据论文的发表,这直接导致了 Hadoop 的问世。
但更深层的原因其实还是因为传统的但节点磁盘容量达到了极限,即便是用上述的 RAID 技术,但单个台服务器的容量始终有一个边界值。而且随着互联网的普及,在 2000 年后,数据的积累呈指数式增长,这时候单台服务器显然已经放不下这海量的数据了。但是就像 RAID 的改革思想一样,既然单台服务器不够,那我们就加服务器呗。
最早是 Google ,他们在自己的系统上实现了 Google File System(GFS) 这么一个分布式存储系统,并在 03 年的时候将它的实现论文发表了出来。
但要将多台服务器联合在一起进行分布式存储,显然不是那么容易。Hadoop1.0 的时候,Hdfs 还是有一些隐患的。举个例子,用分布式进行数据存储,那就需要一个来记录元数据的服务器,也就是记录数据存储位置的服务器。Hadoop1.0 时候的 Hdfs 是用一个 namenode 管理元数据的,但显然,只有一个 namenode 来存储元数据有极大的风险,那就是 namenode 的可靠性无法保证,一旦这个 namenode 挂掉,整个集群就完蛋了。
好在这些问题及时得到修复,Hadoop2.0 横空出世,架构升级,解决了大部分的问题,Hdfs 这才算是坐稳了大数据存储王者的宝座。
在这里我们就先不说 Hdfs 的架构如何,依旧是从上面说到的大数据存储的三个指标速度,容量,容错性这几个方面来看 Hdfs。
速度:速度方面的优势源于 Hdfs 合理的设计理念。它默认用到 Hdfs 处理的是大的数据(TB,PB 级的数据),并且摒弃了传统文件系统中的 Update 操作,只有 Append 操作。在这个基础上,Hdfs 将一个文件分割成若干个块(Block),每个块分布在不同的机器中。。和 RAID 利用多个磁盘并发 IO 提高速度一样,每次操作一个文件的时候,实际上是多个机器在并发读取,这样无疑是进一步提高读取速度。
容量:容量这个问题自不必说,理论上是可以无限制得扩容。但实际上由于它的元数据存储在一台 namenode 中,所以它的大小还是会收到元数据存储的这个限制。不过在 Hadoop2.0 后,在机器条件允许的情况下,一个 Hdfs 支撑起 PB 级别的存储还是绰绰有余的。
容错性:在容错性这个方面,从以前到现在基本都是通过数据冗余来实现的。只不过数据冗余的一些策略会根据不同的应用场景而做出一些改变。由于 Hadoop 本身就是假设部署在多台廉价机器上,所以它会倾向于将存储数据的节点当作不可靠的节点。出于这个因素,Hdfs 的默认冗余备份数是3份,就是说当你向 Hdfs 写入一份数据的时候,同时会在其他三台机器上也写入相同的内容。我们可以发现,其实 Hdfs 和 RAID 在思想上是有一些相似之处的。都是通过水平拓展,比如 RAID 水平拓展磁盘,Hdfs 则是水平拓展机器。
铁打的营盘流水的兵。数据就是那些兵,大数据计算框架,比如 Spark,Hive 是将军。而营盘就是 Hdfs 了。兵进进出出,将军换了一个又一个,唯独营盘不会变, Hdfs 无疑是大数据体系中最基础也是最重要的那一环。
这里给出一个有意思的问题:当下一次互联网革命到来,数据又呈指数增长的时候,数据存储的模式会怎样演化呢?会是简单的增加集群吗,比方说让多个 hdfs 集群相互连通?欢迎在评论中写下你的思考。
大数据存储的进化史 --从 RAID 到 Hdfs的更多相关文章
- 从 RAID 到 Hadoop Hdfs 『大数据存储的进化史』
我们都知道现在大数据存储用的基本都是 Hadoop Hdfs ,但在 Hadoop 诞生之前,我们都是如何存储大量数据的呢?这次我们不聊技术架构什么的,而是从技术演化的角度来看看 Hadoop Hdf ...
- 大数据存储:MongoDB实战指南——常见问题解答
锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...
- Sqlserver 高并发和大数据存储方案
Sqlserver 高并发和大数据存储方案 随着用户的日益递增,日活和峰值的暴涨,数据库处理性能面临着巨大的挑战.下面分享下对实际10万+峰值的平台的数据库优化方案.与大家一起讨论,互相学习提高! ...
- MapGis如何实现WebGIS分布式大数据存储的
作为解决方案厂商,MapGis是如何实现分布式大数据存储的呢? MapGIS在传统关系型空间数据库引擎MapGIS SDE的基础之上,针对地理大数据的特点,构建了MapGIS DataStore分布式 ...
- Hadoop第三天---分布式文件系统HDFS(大数据存储实战)
1.开机启动Hadoop,输入命令: 检查相关进程的启动情况: 2.对Hadoop集群做一个测试: 可以看到新建的test1.txt和test2.txt已经成功地拷贝到节点上(伪分布式只有一个节 ...
- GIS大数据存储预研
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在实际项目运行中,时常会出现希望搜索周边所有数据的需求.但是 ...
- 快速构建大数据存储分析平台-ELK平台安装
一.概述 ELK是由Elastic公司开发的Elasticsearch.Logstash.Kibana三款开源软件的缩写(但不限于这三款软件). 为什么使用ELK? 在目前流行的微服务架构中,一个大型 ...
- python3如何随机生成大数据存储到指定excel文档里
本次主要采用的是python3的第三方库xlwt,来创建一个excel文件.具体步骤如下: 1.确认存储位置,文件命名跟随时间格式 2.封装写入格式 3.实现随机数列生成 4.定位行和列把随机数写入 ...
- [NewLife.XCode]分表分库(百亿级大数据存储)
NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量 ...
随机推荐
- DirectShow SDK下载
http://blog.csdn.net/zx3517288/article/details/50547243 Q : GRMSDK_EN_DVD.iso 5 67.3MBGRMSDKIAI_EN_D ...
- Locust性能测试5-参数化批量注册
前言 实现场景:所有并发虚拟用户共享同一份测试数据,并且保证虚拟用户使用的数据不重复. 例如,模拟10用户并发注册账号,总共有100个手机号,要求注册账号不重复,注册完毕后结束测试 准备数据 虚拟用户 ...
- 怎么在jquery里清空文本框的内容
$("input[name='test']").val("").focus(); // 将name=test的文本框清空并获得焦点,以便重新输入
- HTTP 头和 PHP header() 函数
http://unifreak.github.io/translation/Http_headers_and_PHP_header()_function 引言 许多初级到中级的的 PHP 程序员把 h ...
- IO—代码—基础及其用例
字节流:文件.图片.歌曲 使用字节流的应用场景:如果是读写的数据都不需要转换成字符的时候,则使用字节流. 字节流处理单元为1个字节, 操作字节和字节数组.不能直接处理Unicode字符 字节流可用于任 ...
- sql可重复执行语句例子
1.添加字段 SET @add_key_type_to_report = (SELECT IF( (SELECT count(1) FROM INFORMATION_SCHEMA.COLUMNS WH ...
- Linux基础命令---eject
eject eject指令允许在软件控制下弹出可移动媒体(通常是光盘.软盘.磁带或Jaz或ZIP磁盘).该命令还可以控制一些由某些设备支持的自动弹出功能的多光盘转换器,并关闭一些光盘驱动器的盘. 对应 ...
- 有趣的js匿名函数写法(function嵌套)
例子没有什么实际意义,只能做为思路参考 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...
- 分享三个USB抓包软件---Bus Hound,USBlyzer 和-USBTrace(转)
源:分享三个USB抓包软件---Bus Hound,USBlyzer 和-USBTrace Bus Hound官方下载地址:http://perisoft.net/bushound/Bus Hound ...
- 04:sqlalchemy操作数据库
目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...