HDFS分布式原理---概念篇

HDFS分布式系统
2018年10月9日
11:50
什么是大数据:短时间内快速的产生海量的多种多样的有价值的数据
大数据的技术:
分布式存储

分布式计算

  1. 分布式批处理
  2. 数据积攒一段时间,在未来某一时刻一次性计算一批数据
  3. 分布式流处理
  4. 数据实时进行计算,产生一条计算一条

分布式存储
分布式存储系统,是将数据分散存储在多台独立的设备上,存储“大数据”。
举个例子:一位顾客将自己许多的琐碎的小物件交托给一个管理处,管理处有许多可以存放这些小物件的空间,每个空间都是相同大小,且有编号,管理处记录好存放物件空间的位置,汇成一张信息表,这张信息表保留在管理处手中,当顾客想要拿出某个物件时,将要求提供给管理处,管理处从表中查找出来后告诉顾客特定的位置,顾客就可以毫不费力的找到自己需要的物件。
在这里,管理处就是分布式系统的namenode,那张信息表存放的就是元数据(描述数据的数据,存在内存中),每一个存放物件的小空间就是datanode.
实际的文件存储构成为:
1.如果要上传一个大文件,首先计算大文件的block数量=大文件地址/128M
2.client向那么namenode汇报:
1)当前大文件的block数
2)当前大文件的权限信息
3)上传的时间
3.client切割出来一个block (block块:将一个大文件按照每128M划分为一个block,便于存储,基本存储单位)
4.请求block块的ID号及存储位置
5.因为namenode能够掌握全局,管理所有的DataNode,所以它会将负载不高的DateNode地址返回给client
6.client拿到地址后,向DataNode上传数据
7.DateNode存储完毕后,会向NameNode汇报当前的存储情况
NameNode的作用:
掌控全局,管理DataNode以及元数据
接受客户端的读写服务
接收DataNode汇报的block列表信息
NameNode保存的信息包括:
文件的权限,大小,上传时间,blockId,block副本位置
接收client的读请求返回地址

需要注意的是:角色在集群中都是用进程来体现的,一个节点启动了什么进程就扮演什么角色,一个节点可以扮演多个角色。

HDFS分布式原理---概念篇_第1张图片

写操作:通过管道并行的,同步的对block数据块进行写入与备份,以64K大小的packet为单位。
HDFS分布式原理---概念篇_第2张图片
读操作
DataNode的作用:
存储block块,向NameNode发送“心跳”,判断是否正常存在
接收client的读请求

在分布式系统中,为了保证数据的安全性,常对每一个datanode中的数据进行备份,备份数量为2,备份在集群中的两台服务器上。
具体备份机制为:
1.第一个block存储在负载较小的一台服务器上
2.第一个备份的block存储在与第一个block不同机架随机一台服务器上
3.第二个备份在与第一个备份相同的机架另一台随机的服务器上

(机架:HDFS集群主要是由分布在不同机架上的多个机架的DataNode组成的,相同机架上的机器之间通过TCP协议进行相应的连接(7077端口),不同机架上的节点通过交换机进行通信,HDFS会通过机架感知策略感知每一个DataNode所属的机架,使用副本放置策略来改进数据的可靠性、可用性和网络带宽的利用率。)

HDFS分布式原理---概念篇_第3张图片

HDFS分布式原理---概念篇_第4张图片

减轻NameNode的工作量,确保内存的工作效率

合并触发机制:
1.超过3600s
2.edits文件超过64M

PrimaryNameNode 中存储好edits和fsimage两个文件。edits记录使元数据发生变化的操作,fsimage中记录变化后的元数据。持久化过程就是将内存的元数据存储到磁盘上(SecondaryNameNode)进行备份,保证集群的效率,并在磁盘上进行元数据信息的合并,合并后将合并文件再返回给PrimaryNameNode;注意的是,当PrimaryNameNode的edits文件被取走时,PrimaryNameNode随即创建一个新的记录文件,以防止数据丢失,在返回合并文件后,将新建的edits文件更名为edits。

注意:并不是所有元数据都会持久化,除了block位置信息,其他的元数据都会持久化,为保证元数据不缺失,当HDFS集群启动时,所有的DataNode都会向NameNode汇报当前节点的block信息
总结:

  1. 当集群启动之时,DataNode会向NameNode发送一些信息(block位置、DataNode地址,这些都由DataNode自己为NameNode提供)存放在NameNode中作为元数据;重启时nameNode做一次且唯一一次的合并工作,读取合并上次关闭集群时的edits和fsimage
  2. 客户端汇报当前要上传的文件信息(block数量)文件的上传时间、权限、拥有者,也存放在nameNode作为元数据
  3. 客户端汇报完信息后,nameNode请求一个ID号以及请求存放的位置;一般采用集群外提交,nameNode返回给客户端一个负载不高的DataNode,然后根据备份机制将数据备份在另外两台服务器上,(如果是集群内提交,第一个位置是当前节点,第二三仍遵循备份机制);写数据时采用的是管道方式的传输,将block分解成一个个packet(64k)进行写入与备份,采取这样的方式为的是使此过程实现并行,以提高效率。
  4. SecondaryNameNode的作用:模拟执行 edits文件,产生元数据,将元数据与fsimage合并合并完成后,将新的fsimage推送给namenode
  5. 文件的权限依据Linux系统的用户系统默认的权限
  6. 集群启动时会进入一段时间的安全模式,作用
    a) 加载fsimage,加载到内存中
    b) 如果edits文件不为空,那么nameNode自己合并一次
    c) 检查DataNode的健康情况
    d) 如果有DataNode服务停止了,指挥做备份
    e) 处于安全模式时,只能看到文件目录,无法读取文件

7.HDFS集群不允许修改,文件的block大小不允许修改

你可能感兴趣的:(HDFS原理,HDFS,分布式存储原理,大数据)