hdfs合并块_HDFS(Hadoop2.X HDFS源码剖析)

特点:高容错(多副本存储)、高吞吐(文件块大128M,减少寻址时间)、大文件(一次写入,多次读取)、支持跨平台移植;

1、namenode的作用:主要存储着hdfs的元数据信息(目录INodeDirectory、文件INodeFile),比如命名空间信息和数据块在DataNode上的对应信息;元数据信息运行时主要保存在内存中,也可以持久化在磁盘成fsimage和editslog;DataNode主要保存和管理所保存的blocks块;

2、namenode的安全模式:在namenode启动时会进入安全模式,不接受命名空间的修改以及复制和删除DataNode中数据块的指令。启动后,首先加载fsimage和editslog进行合并操作,初始化文件和目录的元数据信息,将文件blocks信息添加到blocksmap中,之后进入rpc等待状态,接受DataNode的块汇报,在blocksmap中动态的构建block和blockID之间的映射关系,并且判断收集到的块和总块数的比值是否达到阈值,达到阈值一段时间后退出安全模式。

3、namenode的检查点机制(fsimage和editlog如何合并):合并过程非常耗费时间,所以在secondary namenode(非HA)和standby namenode上执行。触发机制:1、超过了配置检查点的操作时间(一般是60分钟);2、事务数超过了配置(一般设置成100万个);secondary namenode执行检查点机制(非ha):SN通过rpc调用NN中的事务ID,重置NN中的editlog文件得到seen_id(上一次的检查点ID),SN通过http从NN中获得最新的fsimage和editslog文件,然后SN进行加载进内存逐一运行editslog事务进行合并,形成新的fsimage,SN将fsimage通过http将最新的fsimage发送回NN// Stanby Namenode检查点机制:集群中有AN、SN和奇数个journalnode持久化editslog,AN会向JN不断地发送更新的editslog文件,SN会观察JN中editslog的变化,不断读取editslog与当前的fsimage进行合并,始终保持着最新的fsimage文件,SN向AN发送HTTP请求,AN根据事务id、下载地址对fsimage文件进行下载;

4、hdfs中那namenode高可用实现:在Hadoop2.X之前,Namenode是HDFS集群中可能发生单点故障的节点,每个HDFS集群只有一个namenode,一旦这个节点不可用,则整个HDFS集群将处于不可用状态。 HDFS高可用(HA)方案就是为了解决上述问题而产生的,在HA HDFS集群中会同时运行两个Namenode,一个作为活动的Namenode(Active),一个作为备份的Namenode(Standby)。备份的Namenode的命名空间与活动的Namenode是实时同步的,所以当活动的Namenode发生故障而停止服务时,备份Namenode可以立即切换为活动状态,而不影响HDFS集群服务。

HA的功能主要包含主备切换、共享日志存储:1、active namenode将日志文件写入共享文件系统,stanby namenode不断地从文件系统中获取日志文件保持同步。共享文件系统通常使用群体日志(Quorum Journal),包含journalnode和Quorum Journal manager,QJM通过调用RPC和JN集群进行通信,将日志写入JN并且持久化道磁盘(预防脑裂内置fencing机制)。默认为集群中有2n+1台JN,当n+1台以上的JN返回成功就认为写入成功(paxos算法);2、主备切换:每台NN都需要部署zkfc进行namenode状态监控,并且将状态写入zookeeper。zkfc主要包含healthmonitor和activatestanbyelector,healthmonitor启动内部线程实时监控namenode的监控情况并且实时的反馈给zkfc,如果检测AN宕机后zkfc调用activatestanbyelector与zookeeper进行交互完成主备切换,回调zkfc方法与namenode进行通信;

5、namenode(HA)脑裂问题:由于网络分区产生多个master,主要有三个级别的隔离机制:1、共享存储隔离:同一时间只允许一个namenode向JN中写入日志数据(epoch隔离);2、客户端隔离:同一时间只允许一个namenode相应客户端请求;3、datanode的隔离机制:同一时间只允许一个namenode向DN发送指令(NN序列号完成主备切换后增大,必须使得NN序列号大于等于DN);

6、HDFS租约机制(保证hdfs写操作的互斥性):保证租约者(客户端在租约期内拥有文件写权力),租约lease包含了租约持有者、租约对应文件id、更新时间; 租约管理由leasemanager进行管理(运行在AN),包含了租约和持有者的映射、租约和对应文件的映射、按照顺序对租约集合的保存,维护一个monitor线程定时检查租约是否过期(过期时间60分钟);租约恢复:数据写入过程中客户端异常退出时,同一数据块的不同副本可能存在不一致的状态。遍历所有的DN副本节点,选择最近一次进行汇报的DN 作为主恢复节点,namenode通过心跳向主DN发送恢复指令,主节点收到指令后,联系各个参与节点,选择最短的blocks长度和最新的时间戳作为恢复副本进行恢复,主DN向NN汇报恢复结果,NN更新blockmap和DataNodestoragaeinfo。

7、hdfs的读流程和写流程?写流程:1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。2)NameNode返回是否可以上传。3)客户端请求第一个 Block上传到哪几个DataNode服务器上。4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。6)dn1、dn2、dn3逐级应答客户端。7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。读流程:1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

8、从Datanode中读取数据主要有两种模式:普通模式和零拷贝模式;普通模式:磁盘到操作系统的内核缓冲区、跨内核到datanode进程的用户缓冲区、跨内核到内核中的socket缓冲区、最后到网卡缓冲区;零拷贝模式:直接磁盘到内核缓冲区到网卡缓冲区,减少了datanode中转的过程,将datanode的校验和的步骤交给了客户端去解决,客户端将校验结果返回给datanode。总结来看就是零拷贝模式将数据拷贝和操作系统内核态和用户态的切换次数由4次减少为2次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值