HDFS学习总结

HDFS(分布式存储)学习总结

1.Hadoop的历史
Hadoop的作者是dogcutting,在其开发的Lucene数据存储工具的基础上实现的Hadoop;Hadoop的三驾马车分别为:Google发布的GFS、MapReduce、BigTable,这是Hadoop实现的前提论文;Hadoop的生态圈包括:HDFS、MapReduce、yarn、common。
2.HDFS存储原理
1)NameNode的作用

①接受客户端的读写请求
②管理元数据
    1》上传的文件的权限
    2》上传文件的属主以及属组
    3》上传文件的时间
    4》上传文件的block数以及ID号
    5》每一个Block的位置信息是由DataNode在集群启动之时汇报的   不会持久化
    6》各个DataNode位置信息
 ③管理DataNode

2)DataNode的作用

    ①接受客户端的读请求
	②存储block块
	③向active NameNode汇报心跳
	④构建pipeline。并行存储数据
	⑤管理本机上block元数据

3 )SecondaryNameNode的作用
负责持久化,拉取NameNode节点上的edits+fsimage文件进行合并。
为什么要搞edits来存储操作呢?
edits文件存储客户端对HDFS的操作,其作用是将改变元数据的操作记录下来,交给SecondaryNameNode重演,产生新的元数据,这些操作都在SecondaryNameNode中完成,以减轻NameNode的工作,是集群的工作效率更高。
edits+fsimage文件合并过程

1.文件拉取之时,在NN节点上回创建edits_new  目的就是为了存储在合并期间对HDFS的操作
2.基于拉来的edits文件重演 产出元数据
3.将重演产出的元数据合并到fsimage中
4.将合并后fsimage推送给NameNode
5.将edits.new文件的后缀去掉

合并的触发机制:

1、超过3600s就合并一次
2、edits文件大小超过64M

HA式中加入的角色:
4)ZKFC的作用(节点上启动的进程)

1.监控各自的NameNode,将监控的情况汇报给ZooKeeper集群
2.接受zookeeper的选举结果,确认一下另外一个NameNode是否真的挂了,将自己监控的NameNode提升为active状态

5)journalNode的作用

1.写数据的时候只需要保证半数以上的节点写入成功就可以了,由势力范围决定;为啥要超过半数?防止出现脑裂问题 网络分区问题。
2.最终一致性/弱一致性:写数据的时候只需要保证半数以上的节点写入成功
  强一致性:所有的节点都必须写入数据成功
3.存储的是edits文件

6)备用的NameNode的作用

1、监控journalnode中数据变化,实时更新自己的内存元数据
2、将内存中元数据持久化到fsimage中,然后推送给NameNode
3、准备在activeNodenode出问题时替代其提升为active状态

3.备份机制

1.如果是集群外操作(建议),第一个block存储在负载不高的节点上
  默认128M  dfs.blocksize(可以更改大小
  严格按照字节切割,如果存储的是中文,会出现乱码问题
2.如果集群内操作,在本机存储第一个block,易出现数据倾斜问题,不建议
3.第二个block存在其他机架随机一台节点备份
4.第三个block存在与第二个block同机架的其他节点上

4.HDFS的读写流程

1.客户端发起读文件请求,向NameNode发送请求(当然还有第二个NameNode),
由于NameNode存放着DataNode的信息,比如说数据块的存放信息等,所以NameNode
会向客户端返回元数据,这些元数据包含了数据块的信息等。客户端得到元数据后直接
去读取数据块,实现了文件的读取。

2.客户端得到文件后将文件进行分块,默认一个block为128M,这些block的数据信息会
写入NameNode,同时复制到SecondaryNameNode ,然后NameNode会告诉客户端
DataNode的情况,比如该如何 写啊,哪个数据块放在哪等等。
客户端得到这些信息后就向DataNode开始写数据(以数 据块的格式),在写入过程中会
在各个节点与客户端之间建立一个管道,保证并行的输数据写入,在管道中传输的是将
block拆分成64K大小的packet为单位进行三个节点的写入数据与备份的,这些操作
完成之后会把DataNode的最新信息反馈到NameNode。再有数据来的时候按照上述过程
流式进行。

5.搭建集群的三种模式(详细步骤见我环境搭建博客
1.伪分布式 --》测试环境使用
2.完全分布式

配置文件决定各个节点角色,需更改:
hdfs-site.xml、core-site,xml、slaves从节点hostname

3.高可用的完全分布式

简单步骤:
1.更改hdfs-site.xml、core-site.xml、slaves从节点hostname
2.先启动所有的journalnode
3.格式化
4.将本机的NameNode启动
5.去备用的NameNode节点,同步元数据
6.格式化zkfc (先启动zookeeper)
7.关闭所有的节点
8.start-dfs.sh
   启动时进入安全模式:
   1)NameNode会将fsimage与edits合并
   2)检查各个节点上的block块以及副本是否符合要求 若不符合要求,指挥存储数据丢失的DataNode做备份
   3)检查各个DN的健康情况

6.HDFS的优缺点
优点:

副本机制,所以数据更安全;因为是分布式存储,所以适合批处理;
高可用;元数据持久化;禁掉了一些功能,使得集群更加完美:1、修改、2、文件一旦
上传成功,就不能修改block块的大小 

缺点:

1.无法毫秒级的读写数据:读写复杂需要找nn请求;形成管道,文件切割block  block packet
2.不适合存储大量的小文件:容易造成元数据过多,NameNode内存溢出
解决方案:1、将小文件合并成一个大文件、2、联邦机制
3.不能并发写入,但是可以并发的读 

猜你喜欢

转载自blog.csdn.net/hjy1821/article/details/83036480