北京治疗白癜风大约花多少钱 http://pf.39.net/bdfyy/bdfjc/150526/4629686.html
点击蓝色字免费订阅,每天收到这样的好信息
?一起学习、成长,用热情拥抱生活?前言上一篇:Hadoop框架之HDFS的数据流(面试重点),主要讲解的是HDFS的写数据流程和读数据流程,是我们面试中常见的问题,大家要重视。今天,小编给大家讲解另外一个面试开发重:NameNode和SecondaryNameNode这两个重要概念,把这个理解透有利于后续学习。No.1NN和2NN工作机制请大家思考一个问题:NameNode中的元数据是存储在哪里的?相信大家心里应该有答案了吧。要是还没想清楚,可以看下面我的解释:1.第一阶段:NameNode启动(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。(2)客户端对元数据进行增删改的请求。(3)NameNode记录操作日志,更新滚动日志。(4)NameNode在内存中对数据进行增删改。2.第二阶段:SecondaryNameNode工作(1)SecondaryNameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。(2)SecondaryNameNode请求执行CheckPoint。(3)NameNode滚动正在写的Edits日志。(4)将滚动前的编辑日志和镜像文件拷贝到SecondaryNameNode。(5)SecondaryNameNode加载编辑日志和镜像文件到内存,并合并。(6)生成新的镜像文件fsimage.chkpoint。(7)拷贝fsimage.chkpoint到NameNode。(8)NameNode将fsimage.chkpoint重新命名成fsimage。?????????????????????????????????NN和2NN工作机制详解:Fsimage:NameNode内存中元数据序列化后形成的文件。Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。NameNode启动时,先滚动Edits并生成一个空的edits.inprogress,然后加载Edits和Fsimage到内存中,此时NameNode内存就持有最新的元数据信息。Client开始对NameNode发送元数据的增删改的请求,这些请求的操作首先会被记录到edits.inprogress中(查询元数据的操作不会被记录在Edits中,因为查询操作不会更改元数据信息),如果此时NameNode挂掉,重启后会从Edits中读取元数据的信息。然后,NameNode会在内存中执行元数据的增删改的操作。由于Edits中记录的操作会越来越多,Edits文件会越来越大,导致NameNode在启动加载Edits时会很慢,所以需要对Edits和Fsimage进行合并(所谓合并,就是将Edits和Fsimage加载到内存中,照着Edits中的操作一步步执行,最终形成新的Fsimage)。SecondaryNameNode的作用就是帮助NameNode进行Edits和Fsimage的合并工作。SecondaryNameNode首先会询问NameNode是否需要CheckPoint(触发CheckPoint需要满足两个条件中的任意一个,定时时间到和Edits中数据写满了)。直接带回NameNode是否检查结果。SecondaryNameNode执行CheckPoint操作,首先会让NameNode滚动Edits并生成一个空的edits.inprogress,滚动Edits的目的是给Edits打个标记,以后所有新的操作都写入edits.inprogress,其他未合并的Edits和Fsimage会拷贝到SecondaryNameNode的本地,然后将拷贝的Edits和Fsimage加载到内存中进行合并,生成fsimage.chkpoint,然后将fsimage.chkpoint拷贝给NameNode,重命名为Fsimage后替换掉原来的Fsimage。NameNode在启动时就只需要加载之前未合并的Edits和Fsimage即可,因为合并过的Edits中的元数据信息已经被记录在Fsimage中。No.2Fsimages和Edits解析1.Fsimage和Edits概念2.oiv查看Fsimage文件将显示的xml文件内容拷贝到IDEA中创建的xml文件中,并格式化。部分显示结果如下:?xmlversion="1.0"?fsimageNameSectiongenstampV/genstampV1genstampV/genstampV2genstampV1Limit0/genstampV1LimitlastAllocatedBlockId/lastAllocatedBlockIdtxid0/txid/NameSectionINodeSectionlastInodeId/lastInodeIdinodeid/idtypeDIRECTORY/typename/namemtime0/mtimepermissionxuefa:supergroup:rwxr-xr-x/permissionnsquota/nsquotadsquota-1/dsquota/inode/INodeSectionINodeReferenceSection/INodeReferenceSectionSnapshotSectionsnapshotCounter0/snapshotCounter/SnapshotSectionINodeDirectorySection/INodeDirectorySectionFileUnderConstructionSection/FileUnderConstructionSectionSnapshotDiffSectiondiffinodeid/inodeid/diff/SnapshotDiffSectionSecretManagerSectioncurrentId0/currentIdtokenSequenceNumber0/tokenSequenceNumber/SecretManagerSectionCacheManagerSectionnextDirectiveId1/nextDirectiveId/CacheManagerSection/fsimage思考:可以看出,Fsimage中没有记录块所对应DataNode,为什么?在集群启动后,要求DataNode上报数据块信息,并间隔一段时间后再次上报。3.oev查看Edits文件将显示的xml文件内容拷贝到Eclipse中创建的xml文件中,并格式化。显示结果如下:
?xmlversion="1.0"encoding="UTF-8"?EDITSEDITS_VERSION-63/EDITS_VERSIONRECORDOPCODEOP_START_LOG_SEGMENT/OPCODEDATATXID1/TXID/DATA/RECORDRECORDOPCODEOP_MKDIR/OPCODEDATATXID2/TXIDLENGTH0/LENGTHINODEID/INODEIDPATH/user/PATHTIMESTAMP1/TIMESTAMPPERMISSION_STATUSUSERNAMExuefa/USERNAMEGROUPNAMEsupergroup/GROUPNAMEMODE/MODE/PERMISSION_STATUS/DATA/RECORDRECORDOPCODEOP_MKDIR/OPCODEDATATXID3/TXIDLENGTH0/LENGTHINODEID/INODEIDPATH/user/xuefa/PATHTIMESTAMP3/TIMESTAMPPERMISSION_STATUSUSERNAMExuefa/USERNAMEGROUPNAMEsupergroup/GROUPNAMEMODE/MODE/PERMISSION_STATUS/DATA/RECORDRECORDOPCODEOP_MKDIR/OPCODEDATATXID4/TXIDLENGTH0/LENGTHINODEID/INODEIDPATH/user/xuefa/input/PATHTIMESTAMP3/TIMESTAMPPERMISSION_STATUSUSERNAMExuefa/USERNAMEGROUPNAMEsupergroup/GROUPNAMEMODE/MODE/PERMISSION_STATUS/DATA/RECORDRECORDOPCODEOP_ADD/OPCODEDATATXID5/TXIDLENGTH0/LENGTHINODEID/INODEIDPATH/user/xuefa/input/xiaopan.txt._COPYING_/PATHREPLICATION3/REPLICATIONMTIME2/MTIMEATIME2/ATIMEBLOCKSIZE/BLOCKSIZECLIENT_NAMEDFSClient_NONMAPREDUCE__1/CLIENT_NAMECLIENT_MACHINE.../CLIENT_MACHINEOVERWRITEtrue/OVERWRITEPERMISSION_STATUSUSERNAMExuefa/USERNAMEGROUPNAMEsupergroup/GROUPNAMEMODE/MODE/PERMISSION_STATUSRPC_CLIENTID16fbdcd9-53b1-42dc-a-c78ec3fa0e9c/RPC_CLIENTIDRPC_CALLID3/RPC_CALLID/DATA/RECORDRECORDOPCODEOP_CLOSE/OPCODEDATATXID6/TXIDLENGTH0/LENGTHINODEID0/INODEIDPATH/user/xuefa/input/xiaopan.txt._COPYING_/PATHREPLICATION3/REPLICATIONMTIME7/MTIMEATIME2/ATIMEBLOCKSIZE/BLOCKSIZECLIENT_NAME/CLIENT_NAMECLIENT_MACHINE/CLIENT_MACHINEOVERWRITEfalse/OVERWRITEPERMISSION_STATUSUSERNAMExuefa/USERNAMEGROUPNAMEsupergroup/GROUPNAMEMODE/MODE/PERMISSION_STATUS/DATA/RECORDRECORDOPCODEOP_RENAME_OLD/OPCODEDATATXID7/TXIDLENGTH0/LENGTHSRC/user/xuefa/input/xiaopan.txt._COPYING_/SRCDST/user/xuefa/input/xiaopan.txt/DSTTIMESTAMP3/TIMESTAMPRPC_CLIENTID16fbdcd9-53b1-42dc-a-c78ec3fa0e9c/RPC_CLIENTIDRPC_CALLID6/RPC_CALLID/DATA/RECORD/EDITS思考:NameNode如何确定下次开机启动的时候合并哪些Edits?No.3CheckPoint时间设置这个就是修改一下配置文件即可,具体修改方法如下:No.4NameNode故障处理这个就是修改一下配置文件即可,具体修改方法如下:NameNode故障后,可以采用如下两种方法恢复数据。方法一:将SecondaryNameNode中数据拷贝到NameNode存储数据的目录。1.killnamenode进程2.删除NameNode存储的数据3.拷贝SecondaryNameNode中数据到原NameNode存储数据目录4.重新启动NameNode方法二:使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中。No.5集群安全模式1.概述集群安全模式2.基本语法3.案例模拟等待安全模式(1)查看当前模式(2)先进入安全模式(3)创建并执行下面的脚本在/opt/module/hadoop-2.7.2路径上,编辑一个脚本safemode.sh脚本内容如下:
#!/bin/bashhdfsdfsadmin-safemodewaithdfsdfs-put/opt/module/hadoop-2.7.2/README.txt/(4)再打开一个窗口,执行No.6NameNode多级目录1.NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性2.具体配置如下(1)在hdfs-site.xml文件中增加如下内容
propertynamedfs.namenode.name.dir/namevaluefile:///{hadoop.tmp.dir}/dfs/name1,file:///{hadoop.tmp.dir}/dfs/name2/value/property(2)停止集群,删除data和logs中所有数据。(3)格式化集群并启动。总结今天,小编带着大家一起学习:Hadoop框架之HDFS的两个重要概念:NameNode和SecondaryNameNode,这是一个面试开发重点,大家切不可忽视。后面跟着小编一起学习!后续将会持续更新,请保持