Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HDFS

Avatar for jiangbo jiangbo
October 23, 2012
180

 HDFS

Avatar for jiangbo

jiangbo

October 23, 2012
Tweet

Transcript

  1. NN Data Structure • Valid fsname -> block list (keep

    on disk) • Set of all valid blocks (inverted #1) • block -> machinelist (keep in memory, rebuilt from datanode blocksreport) • machine -> blocklist (inverted #2&#3) • LRU cache of updated-heartbeat machines Monday, October 22, 12
  2. NN-BlocksMap • BlocksMap༻ဋ维护Block -> { INode, datanodes, self ref }

    తөࣹ䎔 ܥ • BlockදࣔҰ࿽Blockతجຊ৴ଉ • BlockInfo扩లࢠBlockɼআجຊ৴ଉ֎还แׅ该blockతinodeҾ༻ɼ࿨ ॴଐతdatanode৴ଉ Monday, October 22, 12
  3. NN-Heartbeat • NameNodeத维护ྃҰ࿽datanode৺௓检测త਺组heartbeatsɼཬ໘维护 ྃ㑌࿽datanodeత࠷৽时间ፎɼdatanodeधཁपظੑ޲NameNode发ૹ ৺௓请ٻɼߋ৽࠷৽时间ፎɻ • NameNodeத HeartbeatMonitor线ఔपظߦ检查heartbeatsྻදதੋ൱༗ ௒时ະߋ৽తdatanodeɼ೗༗则认为该节఺ቮ经deadɼ删আ该节఺ɼኂ 删আ该节఺্ॴ༗తblock৴ଉɻ

    • ೗过༗༗Ꮘతblockɼক这ࠣ༗ᏈblockՃೖ౸धཁ备㟨తྻදதɼ进ߦ备 㟨ɻ • ೗Ռ删আblock导கू܈த达౸备㟨ܥ਺త༗ᏈblockతൺྫԼ߱౸进ೖ safemodeత阀值ɼকձ导கNameNode进ೖSafeModeɼ௚ࢸ备㟨਺满଍ ࠷௿ཁٻ ࢀ⻅见ɿhttp://jiangbo.me/blog/2012/10/18/hdfs-heartbeat/ Monday, October 22, 12
  4. NN-෭ຊ؅ཧ • HDFSதత෭ຊ؅ཧ௨过FSNameSystem.javaதతReplicationMonitor线 ఔདྷ׬੒ɻ • 该线ఔपظੑว历 neededReplicationsྻදɼ҈র优ઌ级查ፙ࠷ߴ优ઌ 级ঘະ备㟨తblock • ࢖༻

    replicator为该block选औҰ࿽ଘ์备㟨త໨标datanodeʢ实际త备 㟨ૢ࡞ੋࡏ该datanodeԼҰ࣍৺௓检测时༝NN௨஌ଖ҈੒ʣ • ক该blockՃೖ౸ਖ਼ࡏ备㟨తྻදதʢ pendingReplicationsʣɼኂဓ neededReplicationsҠআ • ಉ时该线ఔձ检测ਖ਼ࡏ备㟨తblockத௒时ঘະ׬੒备㟨తɼকଖဓ pendingReplicationsҠআɼॏ৽Ճೖ౸neededReplicationsத ࢀ⻅见ɿhttp://jiangbo.me/blog/2012/10/18/hdfs-namenode-replica-management/ Monday, October 22, 12
  5. NN-ճᏅࢉ๏ 1) NameNode 查 ፙlease৴ଉ 2) 对 ဋleaseதత㑌࿽จ݅fɼྩb 为 fత࠷޳Ұ࿽blockɼ࡞೗Լૢ࡞ɿ

    2.1) 获 औbॴࡏతdatanodeྻද 2.2) ྩଖதҰ࿽datanode࡞ 为 primary datanode p 2.3) p ဓNameNode 获 औ࠷৽త 时间 ፎ 2.4) p ဓ㑌࿽DataNode 获 औblock৴ଉ 2.5) p 计 ࢉ࠷খతblock 长 ౓ 2.6) p ༻࠷খతblock 长 ౓࿨࠷৽త 时间 ፎདྷߋ৽۩༗༗Ꮘ 时间 ፎతdatanode 2.7) p ௨஌NameNodeߋ৽ 结 Ռ 2.8) NameNodeߋ৽BlockInfo 2.9) NameNodeဓleaseத 删 আfɼ೗Ռࠑ 时该 leaseதॴ༗จ݅౎ቮඃ 删 আɼক 删 আ 该 lease 2.10) NameఏަमվతEditLog Monday, October 22, 12
  6. Secondary NameNode • SecondaryNameNodeࡏHDFSதతओཁ࡞༻ੋ㢦ॿmaster NameNodeपظੑʢᘍ认5෼钟ʣ 执ߦcheckpointૢ࡞ɻ • ଖத༗䫆࿽ओཁతՄ഑ஔଐੑɿ 1. checkpointPeriod:

    䫆࣍检查఺త间ִ时间ɼՄ௨过fs.checkpoint.period഑ஔ 2. checkpointSize: EditLogจ݅త࠷େ值ɼ౰EditLog௒过这࿽࠷େ值时ձ㖘੍೭ߦ checkpointɼՄ௨过fs.checkpoint.size഑ஔɼᘍ认ੋ64M Monday, October 22, 12
  7. DN-਺ਾ结构 • HDFSதDataNodeओཁ 负责维护 block->stream bytesతөࣹ䎔ܥɼଈ 实际 block਺ਾతଘ 储 ɻ

    data/ ├── blocksBeingWritten ├── current │ ├── VERSION │ ├── blk_-1148021215131449924 │ ├── blk_-1148021215131449924_1001.meta │ ├── blk_-8598609183581346893 │ ├── blk_-8598609183581346893_1002.meta │ ├── blk_6693595845022390257 │ ├── blk_6693595845022390257_1003.meta │ └── dncp_block_verification.log.curr ├── detach ├── storage └── tmp Monday, October 22, 12
  8. DN-FSDataSet • FSVolumne༻ဋ进ߦblockจ݅ॴଐతრ؅ཧɼ统计ଘ储໨录额࢖༻৘ႎ • FSVolumeSetੋFSVolumeతू߹ɼఏڙྃॴ༗༰ྔɼႫ༨ۭ间౳ํ๏ɻ • FSDataSetੋࡏFSVolumeSet೭্进ߦ෧૷实现FSDatasetInterfaceआޱɼ޲֎ఏڙ块查询࿨ૢ ࡞ํ๏ɻ • FSDir༻ဋ构ݐblock块ࡏdatanode࣓盘্త层࣍结构ɼᘍ认৘ႎԼ㑌࿽໨录Լ࠷ଟ64࿽ࢠ໨

    录ɼ࠷ଟೳଘ储64࿽块ɻ໨录ॳ࢝Խ时ձ递归扫ඳ໨录Լతॴ༗ࢠ໨录࿨จ݅ɼ构ݐҰ࿽树ܗ 结构ɻaddBlock时ɼटઌ尝试ࡏ౰લ໨录৽Ճ块ɼ೗Ռ౰લ໨录຅༗ۭ闲ۭ间ɼ则尝试ࡏࢠ໨ 录தఴՃɼ೗Ռ຅༗ࢠ໨录ɼ则৽ݐҰ࿽ࢠ໨录ɻ Monday, October 22, 12
  9. Client-DFSClient 1. LeaseCheckerओཁ༻ဋlease检查࿨续约ɻ 2. DFSOutputStream༻ဋఏڙ带bufferతࣈ节ྲྀࣸೖޭೳɻclientࡏࣸೖ਺ਾ时ઌক਺ਾ缓ଘࡏ ຊ஍ɻኂক਺ਾ੾෼੒ଟ࿽packetʢᘍ认㑌࿽packet为64Kʣɻ㑌࿽packetຢඃ፥෼੒ଟ࿽ chunkʢᘍ认512Byteʣɼ㑌࿽chunk౎༗Ұ࿽checksumɻclientࣸ满Ұ࿽packet޳ձক该 packetՃೖ౸Ұ࿽dataqueueதɻ༝DataStreamer线ఔ负责ক㑌࿽packet发ૹ给datanode pipelineɻ发ૹ׬Ұ࿽pakcetɼstreamerձকଖဓdataqueueҠࢸackqueueதɻ ResponseProcessor负责઀Ꮕdatanode发ճతack৴ଉɼ㑌੒ޭ઀ᏅҰ࿽packetతack৴

    ଉɼResponseProcessorձকackqueueத该packet删আɻ 3. DFSInputStream༻ဋఏڙࣈ节ྲྀత读औɼଖ಺෦෧૷ྃ༩NN࿨DNతަޓ 4. DataStreamer: 负责޲datanode pipeline发ૹpacketɻଖຊ਎ੋҰ࿽Daemon线ఔɼဓ namenode获औblockId࿨blockଘ์Ґஔɼকpacket发ૹ给pipelineதతdatanodeɼ㑌࿽ packet౎༗Ұ࿽seqIdɼ㑌࿽packet发ૹ׬时౎ձᏅ౸datanodeతack৴ଉɻ౰Ꮕ౸ॴ༗ packetతack৴ଉ޳ʢදࣔ该blockቮ发ૹ׬ʣɼstreamer䎔闭该blockɻ 5. ResponseProcessor:༻ဋ઀Ꮕdatanodeฦճack৴ଉɼኂক㠳应ackqueueதతpacket删আ Monday, October 22, 12
  10. DataXceiverServer • DataNodeࡏ 启动时 ձ௨ 过 DataXceiverServer䇖 启 Ұ࿽Socket୺ޱɼ 负责

    block਺ਾత 读 ࣸɻ DataXceiverServerຊ਎࡞ 为 Ұ࿽क 护线 ఔɼ 监 ჶdfs.datanode.address഑ஔత਺ਾ 读 ࣸ෰ 务 ୺ ޱɻ౰༗ 请 ٻདྷ 时 ɼ৽ݐҰ࿽DataXceiver 线 ఔ 处 ཧ 请 ٻɻ • DataXceiver 线 ఔ༻ဋ 处 ཧҰ࿽ 读 /ࣸ਺ਾྲྀ 请 ٻɼଖrunํ๏ೖԼओཁੋࠜਾ 请 ٻதෆಉత 请 ٻ㜎ܕɼ 调 ༻㠳 应 త 处 ཧํ๏ Monday, October 22, 12