大数据之一 分布式存储

栏目: 服务器 · 发布时间: 6年前

内容简介:在短时间内分布式存储+分布式计算Hadoop是目前大数据常用的,一个能够对大量数据进行分布式处理的软件框架。

什么是大数据

在短时间内 快速产生海量各种各样有价值 的数据

大数据的核心技术

分布式存储+分布式计算

Hadoop是目前大数据常用的,一个能够对大量数据进行分布式处理的软件框架。

Hadoop框架最核心的设计是 HDFS 和 MapReduce。

HDFS为海量的数据提供了存储,而 MapReduce 则为海量的数据提供了计算

HDFS,全称分布式文件系统(Hadoop Distributed File System),其存储思想简单粗暴来讲就是一台服务器存不下,那么我就用N台来存。

当然事实上不可能这么简单,现在我们假设我们用100台服务器存了10PB的资源,那么我们现在需要拿到资源A,一台一台的去找显然是愚笨不堪的,于是聪明的你,在存储数据时就默默的记下了一张表,表上记录着哪一台服务器上存储了哪些数据,这时我们就可以通过查这表来找到资源A所在的位置,这当然比上面一台一台找方便的多,但这张表其实也是不小的(假设可能有100页),正所谓懒人推动科技,我们希望能直接知道资源A的地址而只提供A的相关描述,而恰巧我们是程序员,于是我们可以编写一个搜索程序,对外留出搜索接口,将查表的任务交给这个程序去做。我们将这个程序部署在一台新的服务器上,那么这就形成了HDFS集群的基本框架。那张表中的记录叫做元数据(描述数据的数据),搜索程序所在的服务器叫做NameNode(NameNode只是个别名,本质就是台服务器, 角色在集群中的映射是通过进程来表现 因为该服务器启动时会产生一个名为NameNode的进程,所以我们称该服务器节点为NameNode节点),同理存储源数据(真实数据)的100台服务器就叫做DataNode。

作文一个文件存储系统,最为重要的就是文件的读和写,在说到文件读写前我们先来了解一下同样重要的HDFS的文件备份机制

文件备份

现在假设数据已经存储下来,但我们难保什么时候数据会损坏丢失或者某个DataNode节点会挂掉,所以实际中我们必须对数据进行备份

HDFS默认备份数为2,即一个数据存3份,当然你可以再多备几份,这里遵循备份数+1<=DataNode节点数

HDFS备份机制

第一份存在一台负载不高的节点上(由NameNode进行选择,如果数据是集群内提交,则直接存在提交数据的本节点)

第二份存在与第一份不同机架的随机节点上

第三份存在与第二份同机架的不同节点上

  1. 现在客户端要上传一个大文件,首先他需要计算出该文件的block数(HDFS中文件是以block块的形式存储的,一个Block块=128M)
  2. 然后客户端向NameNode发送请求,告知其文件的信息,属主,权限,上传时间和Block数。NameNode就会记录这些数据,并准备好相应的blockID
  3. 客户端拿出一个block,向NameNode发送请求
  4. NameNode返回给客户端一个blockId和存储位置
  5. 客户端给block贴上blockId然后根据地址将其存入DataNode中
    这里首先三个地址(备份机制)的DateNode节点形成pipeline管道
    然后客户端将block切割成一个个packet(64K)输入管道(这样做是为了并行存储,提高效率)
  6. 存储完毕后,DataNode向NameNode汇报情况
  7. 重复步骤3直到所有block存储完毕
  1. 文件读就简单了,客户端向NameNode发送请求,说我需要资源A
  2. 于是NameNode便去找资源A的位置然后发给客户端
  3. 客户端根据地址去DataNode读取文件就可以了
    我们这里再想一下,我们去读的时候若是这个DataNode节点挂掉了,那么我们就无法读取数据,而NameNode却不知道这边情况,只是给我们提供无效的地址,这种情况显然是不允许的,于是HDFS中规定DataNode需要向NameNode发送心跳,也就是定时汇报工作,告诉NameNode我还活着,一切OK。如果一定时间内NameNode没有接收到某个DataNode的心跳,那么就会进行处理(备份该DataNode上存储的资源)

SecondaryNameNode

我们这里再想一下,DataNode会挂掉,那么NameNode也挂掉该怎么办呢?

第一反应可能是给NameNode也备份一下,想法是没错的。这里提一下,NameNode管理的元数据是在内存中的,那么我们要怎样备份呢?这里HDFS做的很巧妙,他引入一台新的服务器节点SecondaryNameNode用来将NameNode的元数据持久化到磁盘中,这里我们看图

大数据之一 分布式存储

图中使用edits文件存储对元数据所做的操作,fsimage文件存储元数据的状态信息,

在3600秒或edits文件大小超过64M时,SecondaryNameNode就会copyNameNode中edits和fsimage文件然后进行重演,重演后将fsiamge重命名为fsiamge.ckpt推回到NameNode中,在这个期间NameNode对元数据所做的操作将存储在edits.new文件中,在得到SecondaryNameNode推回的fsimage.ckpt时将fsimage.ckpt重命名为fsimage,edies.new重命名为edit。这样就在SecondaryNamenode中完成了对Namenode的持久化.

顺便一提,block的位置信息是不会持久化的,它依靠于DataNode的心跳获得

安全模式

安全模式是指集群启动之初,NameNode启动时的状态

此时首先加载fsimage到内存中

如果edits文件不为空,则NameNode来进行合并(这是NameNode唯一一次进行合并)

检查DataNode的健康状态,如果有DataNode挂掉,就做备份处理

思维导图

大数据之一 分布式存储


以上所述就是小编给大家介绍的《大数据之一 分布式存储》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

用数据讲故事

用数据讲故事

[美] Cole Nussbaumer Knaflic / 陆 昊、吴梦颖 / 人民邮电出版社 / 2017-8 / 59.00元

本书通过大量案例研究介绍数据可视化的基础知识,以及如何利用数据创造出吸引人的、信息量大的、有说服力的故事,进而达到有效沟通的目的。具体内容包括:如何充分理解上下文,如何选择合适的图表,如何消除杂乱,如何聚焦受众的视线,如何像设计师一样思考,以及如何用数据讲故事。一起来看看 《用数据讲故事》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具