Hadoop的架构及数据的读写流程

大数据学习Hadoop之HDFS

Hadoop和HDFS定义

hadoop广义上讲是指整个大数据学习阶段的hadoop生态圈;狭义上讲就是hdfs和mapreduce,一个用来存储数据,一个用来计算数据。

hdfs是指hadoop分布式文件存储系统,将我们的数据存放在多台服务器上进行存储

文件的存储方式

把大文件切分成多个小文件存储在多个节点上存储

切分:存储时把大的文件切分成多个小的文件,查找时可以根据文件的偏移量进行合并。

等大:文件切分的时候要等大,最后一个不需要

名词:block块(128M),切成的一个小文件就是块

安全:备份block防止小文件合并时出错

Hadoop系统架构

DataNode

数据的存储节点,存储在硬盘中,存放的是文件的数据信息和验证文件完整性的校验信息

当客户端读写数据的时候,首先去NameNode查询文件与Block的映射关系,Block与DataNode的映射关系,然后客户端与DataNode建立连接读写数据

NameNode

功能:

1.接受客户端的读写服务

NameNode存放文件与Block的映射关系
NameNode会记录Block与DataNode的映射关系,但是不会持久化

2.保存文件的元数据信息

3.收集Block的信息

系统启动时,DateNode会将自己节点上存储的Block信息汇报给NameNode

启动完后,DateNode与NameNode保持心跳机制

性能:

NameNode为了效率,将所有的操作都在内存中完成,但数据保存在内存中,掉电易失

NameNodeSecodary

用来合并快照和Edits(让日志大小可控,定时快照保存)

原本快照和日志存储在NameNode中,后为了不占NameNode内存和为了安全,把日志文件和第一次快照加载到SecondaryNameNode上合并生成新的快照,新的快照和新的文件会继续进行合并

安全模式

NameNode启动时的一种状态:

集群启动时把快照读取到内存中并根据日志完善数据,此时监听所需的DataNode是否启动完成,如果没有启动完成,则该系统处于安全模式,只接收客户端的读请求

机架感知原则

block随机选择存储的DataNode节点,要保证副本在集群的安全性和可用性

节点存储在同一机架中,效率高但安全性差;在不同机架中,安全性高但效率低;因此第一个节点随机放,第二和第三个节点,一个放在第一个节点的同一机架,一个放在不同机架,后面其他节点与前面节点不重复

数据的写入流程

1.客户端向HDFS发送数据的写入命令

2.文件系统检查命令的准确性,并通过rpc调用NameNode的creat方法

3.NameNode检查客户端权限及磁盘空间是否满足,如果不满足则抛出异常给客户端,如果满足则创建一个空对象并返回成功状态给文件系统,文件系统会给给客户端创建一个输出流

4.客户端向NameNode请求block存储位置,通过机架感知原则得到。

5.客户端读取数据以packet传输,每个packet由一个Heade,多个checkksum(校验数据)和chuckdate(实际数据)构成,packet会通过队列传输(生成者消费者模式),而且为了数据的安全,会有两个队列,一个DataQueue用来传输,一个AckQueue在传输失败时用来恢复packet继续传输,DataQueue队列中的packet会通过客户端和DataNode的socket通道传输数据,DataNode彼此间通过他们之间的socket通道传输,最后返回ack,整个block传完后关闭通道,接着传输别的block直到所有数据写入完成。

数据的读取流程

1.客户端向文件系统中某个文件发送读取命令

2.文件系统检查命令的准确性,并通过rpc调用NameNode的open方法

3.NameNode检查客户端权限及检查文件是否存在,如果不满足则抛出异常,如果满足则给文件系统返回成功状态,文件创造一个输入流给客户端读取数据

4.客户端获取到Block的多个存储位置,根据就近原则从DataNode读取block数据,依次读取其它block合并一个成文件

Hadoop的高可用

NameNode的备份

ANN

Active NameNode,主节点,功能和原理与NameNode的功能是一样的

SNN

Standby NameNode,备用节点,他和主节点做同样的工作,但是它不会发出任何指令

QJM

Quorum JournalNode Manager 共享存储系统,NameNode通过共享存储系统实现日志数据同步,代替了SecondNameNode存储日志信息。

JournaNode集群,存储日志的集群,它的实现原理和Zookeeper的一致( Paxos),ANN不断向JournaNode提交日志,SNN不断从其得到日志,JournaNode只允许一个NameNode成为作者上传日志。

ZKFC

Failover Controller故障转移控制器,通过zookpper监控NameNode,并通过投票选举出主节点

脑裂

主NameNode因为一些原因被误认为设备故障,备用节点切换为主节点,此时有2个Active节点

解决方案:

1.第三方共享存储:任一时刻,只有一个 NN 可以写入

2.DataNode:需要保证只有一个 NN 发出与管理数据副本有关的命令

3.Client需要保证同一时刻只有一个 NN 能够对 Client 的请求发出正确的响应

Federation

NameNode水平扩展,相当于NameNode集群,两两为一组

每两个NameNode只管理一部分文件,既提高了效率,又增加了隔离性(不同用户请求被隔开)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值