南宁著名的网站,杭州投资公司自适应网站,仿淘宝网站,崇信县门户网站首页1、NameNode和SecondaryNameNode1.1 NN和2NN工作机制1.2 Fsimage和Edits解析1.3 CheckPoint时间设置 2、DataNode2.1 DataNode工作机制2.2 数据完整性2.3 掉线时限参数设置 1、NameNode和SecondaryNameNode
1.1 NN和2NN工作机制
思考#xff1a;NameNode中的元数据是存储在哪… 1、NameNode和SecondaryNameNode1.1 NN和2NN工作机制1.2 Fsimage和Edits解析1.3 CheckPoint时间设置 2、DataNode2.1 DataNode工作机制2.2 数据完整性2.3 掉线时限参数设置 1、NameNode和SecondaryNameNode
1.1 NN和2NN工作机制
思考NameNode中的元数据是存储在哪里的
首先我们做个假设如果存储在NameNode节点的磁盘中因为经常需要进行随机访问还有响应客户请求必然是效率过低。因此元数据需要存放在内存中。但如果只存在内存中一旦断电元数据丢失整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。这样又会带来新的问题当在内存中的元数据更新时如果同时更新FsImage就会导致效率过低但如果不更新就会发生一致性问题一旦NameNode节点断电就会产生数据丢失。因此引入Edits文件只进行追加操作效率很高。每当元数据有更新或者添加元数据时修改内存中的元数据并追加到Edits中。这样一旦NameNode节点断电可以通过FsImage和Edits的合并合成元数据。但是如果长时间添加数据到Edits中会导致该文件数据过大效率降低而且一旦断电恢复元数据需要的时间过长。因此需要定期进行FsImage和Edits的合并如果这个操作由NameNode节点完成又会效率过低。因此引入一个新的节点SecondaryNamenode专门用于FsImage和Edits的合并。
FsImage记录的是结果的值比如a100、b30等。Edits记录的是计算的步骤比如a*2、b-12等。因此FsImage和Edits需要合并。
当服务器一启动的时候就会将FsImage和Edits加载到内存。当服务器一关机的时候就会将FsImage和Edits进行合并。【是2NN将这两个文件定期合并】
NameNode工作机制
1第一阶段NameNode启动 1第一次启动NameNode格式化后创建Fsimage和Edits文件。如果不是第一次启 动直接加载编辑日志和镜像文件到内存。 2客户端对元数据进行增删改的请求。 3NameNode记录操作日志更新滚动日志。 4NameNode在内存中对元数据进行增删改。
2第二阶段Secondary NameNode工作 1Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。 2Secondary NameNode请求执行CheckPoint。 3NameNode滚动正在写的Edits日志。 4将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。 5Secondary NameNode加载编辑日志和镜像文件到内存并合并。 6生成新的镜像文件fsimage.chkpoint。 7拷贝fsimage.chkpoint到NameNode。 8NameNode将fsimage.chkpoint重新命名成fsimage。
1.2 Fsimage和Edits解析 1oiv查看Fsimage文件
1查看oiv和oev命令
[roothadoop102 current]$ hdfsoiv将离线fsimage查看器应用于fsimage oev将离线编辑查看器应用于编辑文件
2基本语法 hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径
3案例实操
[roothadoop102 current]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/name/current[roothadoop102 current]$ hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-3.1.3/fsimage.xml[roothadoop102 current]$ cat /opt/module/hadoop-3.1.3/fsimage.xml将显示的xml文件内容拷贝到Idea中创建的xml文件中并格式化。部分显示结果如下。
inodeid16386/idtypeDIRECTORY/typenameuser/namemtime1512722284477/mtimepermissionatguigu:supergroup:rwxr-xr-x/permissionnsquota-1/nsquotadsquota-1/dsquota
/inode
inodeid16387/idtypeDIRECTORY/typenameatguigu/namemtime1512790549080/mtimepermissionatguigu:supergroup:rwxr-xr-x/permissionnsquota-1/nsquotadsquota-1/dsquota
/inode
inodeid16389/idtypeFILE/typenamewc.input/namereplication3/replicationmtime1512722322219/mtimeatime1512722321610/atimeperferredBlockSize134217728/perferredBlockSizepermissionatguigu:supergroup:rw-r--r--/permissionblocksblockid1073741825/idgenstamp1001/genstampnumBytes59/numBytes/block/blocks
/inode 可以看出Fsimage中没有记录块所对应DataNode为什么
原因在集群启动后要求DataNode主动上报数据块信息并间隔一段时间后再次上报。
2oev查看Edits文件
1基本语法 hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径 2案例实操
[roothadoop102 current]$ hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-3.1.3/edits.xml
[roothadoop102 current]$ cat /opt/module/hadoop-3.1.3/edits.xml将显示的xml文件内容拷贝到Idea中创建的xml文件中并格式化。显示结果如下。
?xml version1.0 encodingUTF-8?
EDITSEDITS_VERSION-63/EDITS_VERSIONRECORDOPCODEOP_START_LOG_SEGMENT/OPCODEDATATXID129/TXID/DATA/RECORDRECORDOPCODEOP_ADD/OPCODEDATATXID130/TXIDLENGTH0/LENGTHINODEID16407/INODEIDPATH/hello7.txt/PATHREPLICATION2/REPLICATIONMTIME1512943607866/MTIMEATIME1512943607866/ATIMEBLOCKSIZE134217728/BLOCKSIZECLIENT_NAMEDFSClient_NONMAPREDUCE_-1544295051_1/CLIENT_NAMECLIENT_MACHINE192.168.10.102/CLIENT_MACHINEOVERWRITEtrue/OVERWRITEPERMISSION_STATUSUSERNAMEatguigu/USERNAMEGROUPNAMEsupergroup/GROUPNAMEMODE420/MODE/PERMISSION_STATUSRPC_CLIENTID908eafd4-9aec-4288-96f1-e8011d181561/RPC_CLIENTIDRPC_CALLID0/RPC_CALLID/DATA/RECORDRECORDOPCODEOP_ALLOCATE_BLOCK_ID/OPCODEDATATXID131/TXIDBLOCK_ID1073741839/BLOCK_ID/DATA/RECORDRECORDOPCODEOP_SET_GENSTAMP_V2/OPCODEDATATXID132/TXIDGENSTAMPV21016/GENSTAMPV21.3 CheckPoint时间设置
1通常情况下SecondaryNameNode每隔一小时执行一次。 [hdfs-default.xml]
propertynamedfs.namenode.checkpoint.period/namevalue3600s/value
/property2一分钟检查一次操作次数当操作次数达到1百万时SecondaryNameNode执行一次。
propertynamedfs.namenode.checkpoint.txns/namevalue1000000/value
description操作动作次数/description
/property
propertynamedfs.namenode.checkpoint.check.period/namevalue60s/value
description 1分钟检查一次操作次数/description
/property2、DataNode
2.1 DataNode工作机制 1一个数据块在DataNode上以文件形式存储在磁盘上包括两个文件一个是数据本身一个是元数据包括数据块的长度块数据的校验和以及时间戳。 2DataNode启动后向NameNode注册通过后周期性6小时的向NameNode上报所有的块信息。 DN向NN汇报当前解读信息的时间间隔默认6小时
propertynamedfs.blockreport.intervalMsec/namevalue21600000/valuedescriptionDetermines block reporting interval in milliseconds./description
/propertyDN扫描自己节点块信息列表的时间默认6小时
propertynamedfs.datanode.directoryscan.interval/namevalue21600s/valuedescriptionInterval in seconds for Datanode to scan data directories and reconcile the difference between blocks in memory and on the disk.Support multiple time unit suffix(case insensitive), as describedin dfs.heartbeat.interval./description
/property3心跳是每3秒一次心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳则认为该节点不可用。
4集群运行中可以安全加入和退出一些机器。
2.2 数据完整性
如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号1和绿灯信号0但是存储该数据的磁盘坏了一直显示是绿灯是否很危险同理DataNode节点上的数据损坏了却没有发现是否也很危险那么如何解决呢 如下是DataNode节点保证数据完整性的方法。 1当DataNode读取Block的时候它会计算CheckSum。 2如果计算后的CheckSum与Block创建时值不一样说明Block已经损坏。 3Client读取其他DataNode上的Block。 4常见的校验算法crc32md5128sha1160 5DataNode在其文件创建后周期验证CheckSum。 实际上使用的不是简单的奇偶校验而是采用crc校验位。
2.3 掉线时限参数设置 需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒dfs.heartbeat.interval的单位为秒。
300000毫秒300秒5分钟
propertynamedfs.namenode.heartbeat.recheck-interval/namevalue300000/value
/propertypropertynamedfs.heartbeat.interval/namevalue3/value
/property