设为首页 加入收藏

TOP

HDFS的一些总结
2019-01-20 12:19:40 】 浏览:53
Tags:HDFS 一些 总结

一、Hadoop历史

Google在2002-2004年间发布了GFS、MapReduce以及BigTable三大论文,也就是Hadoop的“三驾马车”。受此启发的Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。2006年2月被分离出来,成为一套完整独立的开源框架,起名为Hadoop。而Hadoop是以Doug Cutting儿子棕黄色的大象玩具命名的。

Hadoop生态圈包括:

  • HDFS(分布式文件系统)
  • MapReduce(分布式计算框架)
  • Yarn(分布式资源管理器)
  • Common

二、HDFS存储原理

1.各个角色的作用:

NameNode:
1. 接收客户端的读写请求
2. 管理元数据

  • 上传文件的权限
  • 上传文件的属主和属组
  • 上传文件的时间
  • 上传文件的Block数以及ID号
  • 每一个Block的位置信息是由DN在集群启动之时汇报的 (不会持久化)
  • 各个DataNode位置信息

3. 管理DataNode

DataNode:

  • 接受客户端的读请求
  • 存储block块
  • 向NameNode(active)汇报心跳
  • 构建pipeline管道
  • 管理本机上的block元数据

SecondaryNameNode:
扮演助理角色,负责持久化。
持久化机制
SNN拉取NN节点上的 edits+fsimage文件进行合并,拉取的同时在NN节点上会创建edits_new目的就是为了存储在合并期间对HDFS的操作。SNN基于拉来的edits文件重演,产生元数据。将重演产出的元数据合并到fsimage中,将合并后fsimage推送给NN,NN将edits.new文件的后缀去掉,成为新的edits文件。
合并触发机制:
①时间超过3600S合并一次
②edits文件大小超过64M
满足任意一个条件即可触发。

ZKFC:

  1. 监控各自的NN,将监控的情况汇报给zookeeper集群。
  2. 接受zookeeper的选举结果,确认另外一个NN是否存活,将自己监控的NN提升为active状态。

journalnode:

  1. 写数据的时候只需要保证半数以上的节点写入成功就可以了。
    超过半数的原因是为了防止出现脑裂(网络分区)问题
  2. 最终(强)一致性/弱一致性。
  3. 存储的是edits文件。

NameNode(StandBy):

  1. 监控journalnode中数据的变化,实时更新自己内存中的元数据
  2. 将内存中元数据持久化到fsimage中,然后推送给NN

备份机制:
若是集群内操作,则第一个Block存储在本机上,若是集群外操作,第一个Block存储在负载不高的的节点上。第二个Block存储在其他机架随机一台节点上,第三个Block存储在与第二个Block相同机架的其他节点上。

安全模式:
安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求(能查看文件目录,但是无法读取文件内容),而不接受删除、修改等变更请求。
安全模式下NameNode所做的工作:

  1. 加载fsimage,加载到内存中。
  2. 若edits文件不为空,那么namenode自己来合并。
  3. 检查DataNode是否存活。
  4. 若DataNode死亡,则指挥DataNode进行备份操作。

2.HDFS的读写流程:

读流程:

  1. Client访问NameNode,查询元数据信息,获得这个文件的Block位置列表
  2. Namenode返回所有Block的位置信息,并将这些信息返回给Client
  3. Client采用就近原则,挑选一台datanode服务器读取block信息

写流程:

  1. Client计算大文件的Block数量
  2. Client会向NameNode汇报(当前大文件的block数,当前大文件属主、属组权限,文件上传时间)
  3. Client切割Block(默认Block大小为128M,按照字节切割,中文可能出现乱码)
  4. Client向NameNode请求Block块的Id号以及地址
  5. 由于NameNode掌控全局,管理所有的DataNode,所以它将负载不高的DataNode地址返回给client
  6. Client拿到地址后,找到Data去上传数据
  7. NN返回给Client一批地址后,这些DN之间会形成一个Pipeline管道,并且DN会将Block切割成一个个packet(64K),packet通过Pipeline管道,实现并行存储,提高效率。
  8. Data将Block存储完毕后,会向NameNode汇报当前的存储情况

3.HDFS的优缺点:

HDFS优点:

  • 由于备份机制,所以数据更加安全;
  • 由于是分布式存储,所以适合批处理;
  • 高可用性;
  • 元数据的持久化;
  • 禁掉一些功能,使集群更加完美(禁止修改,文件一旦上传成功,就不能修改block块的大小 )。

HDFS缺点:

  • 无法毫秒级的读写数据;
  • 不适合存储大量的小文件,容易造成元数据过多,NN内存溢出;
    解决办法:
    • 将小文件合并成一个大文件;
    • 采用联邦机制。
  • 不能并发写入,但是可以并发的读。

4.搭建集群的三种模式:

1)伪分布式:
在一台服务器上,启动多个进程,分别表示各个角色,测试环境中使用。
2)完全分布式:
在多台服务器上,每台服务器启动不同角色的进程,使用多台服务器组成HDFS集群。
3)高可用完全分布式

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HDFS深入理解 下一篇Hdfs系统文件上传的机制

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目