我们都知道现在大数据存储用的基本都是 Hadoop Hdfs ,但在 Hadoop 诞生之前,我们都是如何存储大量数据的呢?这次我们不聊技术架构什么的,而是从技术演化的角度来看看 Hadoop Hdfs。

我们先来思考两个问题。

  • 在 Hdfs 出现以前,计算机是通过什么手段来存储“大数据” 的呢?
  • 为什么会有 Hadoop Hdfs 出现呢?

在 Hadoop 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 年的时候将它的实现论文发表了出来。而后 Doug Cutting 和 Mike Cafarella 在这三篇论文的基础上开发出了 Hadoop。

但要将多台服务器联合在一起进行分布式存储,显然不是那么容易。Hadoop1.0 的时候,Hdfs 还是有一些隐患的。举个例子,用分布式进行数据存储,那就需要一个来记录元数据的服务器,也就是记录数据存储位置的服务器。Hadoop1.0 时候的 Hdfs 是用一个 namenode 管理元数据的,但显然,只有一个 namenode 来存储元数据有极大的风险,那就是 namenode 的可靠性无法保证,一旦这个 namenode 挂掉,整个集群就完蛋了。

好在这些问题及时得到修复,Hadoop2.0 横空出世,解决了大部分的问,比如上面说到的 NameNode 单点故障问题,解决方式就是多引入一台 NameNode 做同步备份,一个 NameNode 出问题时另一个跳出来扛。升级过后,Hadoop Hdfs 这才算是坐稳了大数据存储王者的宝座。

在这里我们就先不说 Hadoop Hdfs 的架构如何,依旧是从上面说到的大数据存储的三个指标速度,容量,容错性这几个方面来看 Hadoop Hdfs。

  • 速度: 速度方面的优势源于 Hdfs 合理的设计理念。它默认用到 Hdfs 处理的是大的数据(TB,PB 级的数据),并且摒弃了传统文件系统中的 Update 操作,只有 Append 操作。在这个基础上,Hdfs 将一个文件分割成若干个块(Block),每个块分布在不同的机器中。。和 RAID 利用多个磁盘并发 IO 提高速度一样,每次操作一个文件的时候,实际上是多个机器在并发读取,这样无疑是进一步提高读取速度。
  • 容量: 容量这个问题自不必说,理论上是可以无限制得扩容。但实际上由于它的元数据存储在一台 namenode 中,所以它的大小还是会收到元数据存储的这个限制。不过在 Hadoop2.0 后,在机器条件允许的情况下,一个 Hdfs 支撑起 PB 级别的存储还是绰绰有余的。
  • 容错性: 在容错性这个方面,从以前到现在基本都是通过数据冗余来实现的。只不过数据冗余的一些策略会根据不同的应用场景而做出一些改变。由于 Hadoop 本身就是假设部署在多台廉价机器上,所以它会倾向于将存储数据的节点当作不可靠的节点。出于这个因素,Hdfs 的默认冗余备份数是 3份 ,就是说当你向 Hdfs 写入一份数据的时候,同时会在其他三台机器上也写入相同的内容。

我们可以发现,其实 Hadoop Hdfs 和 RAID 在思想上是有一些相似之处的。都是通过水平拓展,比如 RAID 水平拓展磁盘,Hadoop Hdfs 则是水平拓展机器。

铁打的营盘流水的兵。数据就是那些兵,大数据计算框架,比如 Spark,Hive 是将军。而营盘就是 Hadoop Hdfs 了。兵进进出出,将军换了一个又一个,唯独营盘不会变,Hadoop Hdfs 无疑是大数据体系中最基础也是最重要的那一环。

这里给出一个有意思的问题: 当下一次互联网革命到来,数据又呈指数增长的时候,数据存储的模式会怎样演化呢?会是简单的增加集群吗,比方说让多个 hdfs 集群相互连通?欢迎在评论中写下你的思考。

从 RAID 到 Hadoop Hdfs 『大数据存储的进化史』的更多相关文章

  1. 大数据存储的进化史 --从 RAID 到 Hdfs

    我们都知道现在大数据存储用的基本都是 Hdfs ,但在 Hadoop 诞生之前,我们都是如何存储大量数据的呢?这次我们不聊技术架构什么的,而是从技术演化的角度来看看 Hadoop Hdfs. 我们先来 ...

  2. 分布式文件系统HDFS,大数据存储实战(一)

    本文进行了以下工作: OS中建立了两个文件,文件中保存了几组单词. 把这两个文件导入了hadoop自己的文件系统. 介绍删除已导入hadoop的文件和目录的方法,以便万一发生错误时使用. 使用列表命令 ...

  3. hadoop job解决大数据量关联时数据倾斜的一种办法

    转自:http://www.cnblogs.com/xuxm2007/archive/2011/09/01/2161929.html http://www.geminikwok.com/2011/04 ...

  4. 创新能力加速产业发展,SphereEx 荣获“中关村银行杯”『大数据与云计算』领域 TOP1

    8 月 9 日下午,2022 中关村国际前沿科技创新大赛"中关村银行杯"大数据与云计算领域决赛在北京市门头沟区中关村(京西)人工智能科技园·智能文创园落下了帷幕.SphereEx ...

  5. 大数据存储:MongoDB实战指南——常见问题解答

    锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...

  6. Sqlserver 高并发和大数据存储方案

    Sqlserver 高并发和大数据存储方案 随着用户的日益递增,日活和峰值的暴涨,数据库处理性能面临着巨大的挑战.下面分享下对实际10万+峰值的平台的数据库优化方案.与大家一起讨论,互相学习提高!   ...

  7. MapGis如何实现WebGIS分布式大数据存储的

    作为解决方案厂商,MapGis是如何实现分布式大数据存储的呢? MapGIS在传统关系型空间数据库引擎MapGIS SDE的基础之上,针对地理大数据的特点,构建了MapGIS DataStore分布式 ...

  8. Hadoop第三天---分布式文件系统HDFS(大数据存储实战)

    1.开机启动Hadoop,输入命令:  检查相关进程的启动情况: 2.对Hadoop集群做一个测试:   可以看到新建的test1.txt和test2.txt已经成功地拷贝到节点上(伪分布式只有一个节 ...

  9. 后Hadoop时代的大数据架构(转)

    原文:http://zhuanlan.zhihu.com/donglaoshi/19962491 作者: 董飞       提到大数据分析平台,不得不说Hadoop系统,Hadoop到现在也超过10年 ...

随机推荐

  1. [Swift]LeetCode159.具有最多两个不同字符的最长子串 $ Longest Substring with At Most Two Distinct Characters

    Given a string S, find the length of the longest substring T that contains at most two distinct char ...

  2. [Swift]LeetCode344. 反转字符串 | Reverse String

    Write a function that takes a string as input and returns the string reversed. Example 1: Input: &qu ...

  3. Java运行原理及内存分析

    Java运行原理及内存分析 一.Java运行原理 二.Java内存分析

  4. Java编程——学习大纲

    Java基础 Java基础--JDK的安装和配置 Java基础--Eclipse使用 Java基础--基本概念.数据类型.运算符 Java扩展--整型和浮点型在计算机中的存储格式 Java基础--流程 ...

  5. Python—day18 dandom、shutil、shelve、系统标准流、logging

    一.dandom模块 (0, 1) 小数:random.random() [1, 10] 整数:random.randint(1, 10) [1, 10) 整数:random.randrange(1, ...

  6. 有了这 4 大特性,CDN 好用到飞起

    随着 CDN 市场的快速发展和网络新技术的不断涌现,目前的 CDN 已不仅仅是当初简单的内容分发,同时也是新特性研发.新技术推广及实践的平台.这些新技术.新特性,或者能够保障 CDN 安全性,或是提升 ...

  7. redis 系列10 字符串对象

    一. 字符串对象编码 Redis中字符串可以存储3种类型,分别是字节串(byte string).整数.浮点数.在上章节中讲到字符串对象的编码可以是int, raw,embstr. 如果一个字符串对象 ...

  8. Lucene 08 - 什么是Lucene的相关度排序 + Java API调整相关度

    目录 1 什么是相关度 2 相关度评分 3 相关度设置 3.1 更改相关度的需求 3.2 实现需求-设置广告 1 什么是相关度 概念: 相关度指两个事物之间的关联关系(相关性). Lucene中指的是 ...

  9. 初探Java设计模式1:创建型模式(工厂,单例等)

    Java 设计模式 一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混.自认为本文还是写得不错的,花了不少心思来写这文章和做图,力求让读者真的能看着简 ...

  10. JavaScript面向对象--封装

    一.封装的概念 面向对象的类包括两大成员,一种是暴露给外部的接口,另一种是只在类内部才能访问的私有属性.在这个类被实例化成对象后,用户只能通过操作给定的接口来访问该类内部的私有属性,这就被称为面向对象 ...