Video: noc19-cs33 Lec 04-Hadoop Distributed File System (HDFS) 2024
När du lagrar en fil i HDFS, bryter systemet ner den i en uppsättning enskilda block och lagrar dessa block i olika slavenoder i Hadoop-klustret. Det här är en helt vanlig sak att göra, eftersom alla filsystem bryter ner filer i block innan de lagras till disken.
HDFS har ingen aning om (och bryr sig inte) vad som lagras i filen, så råa filer delas inte i enlighet med regler som vi människor skulle förstå. Människor vill till exempel registrera gränser - linjerna som visar var en post börjar och slutar - respekteras.
HDFS är ofta lyckligt omedveten om att den slutliga posten i ett block kanske bara är en partiell post, med resten av innehållet shunted till följande block. HDFS vill bara se till att filer delas in i jämnt storlek block som matchar den fördefinierade blockstorleken för Hadoop-förekomsten (om inget anpassat värde anges för filen som lagras). I den föregående figuren är den blockstorleken 128 MB.
Inte varje fil du behöver lagra är en exakt flera av systemets blockstorlek, så det slutliga datablocket för en fil använder bara så mycket utrymme som behövs. I fallet med den föregående figuren är det slutliga datablocket 1 MB.
Begreppet lagring av en fil som en samling av block är helt förenlig med hur filsystemen normalt fungerar. Men vad som är annorlunda om HDFS är skalan. En typisk blockstorlek som du skulle se i ett filsystem under Linux är 4KB, medan en typisk blockstorlek i Hadoop är 128 MB. Detta värde kan konfigureras, och det kan anpassas, både som en ny standard för systemet och ett anpassat värde för enskilda filer.
Hadoop var utformad för att lagra data på petabyte-skalan, där eventuella begränsningar för att skala ut minimeras. Den höga blockstorleken är en direkt följd av detta behov av att lagra data i stor skala.
Först och främst har varje datablock som lagras i HDFS egna metadata och måste spåras av en central server så att applikationer som behöver komma åt en specifik fil kan riktas till varhelst alla filens block sparas. Om blockstorleken var i kilobytintervallet skulle även blygsamma datamängder i terabyte-skalaen överbrygga metadataservern med alltför många block att spåra.
För det andra är HDFS utformad för att möjliggöra hög genomströmning så att parallellbehandling av dessa stora datasatser sker så snabbt som möjligt. Nyckeln till Hadops skalbarhet på databehandlingssidan är, och alltid kommer att vara, parallellitet - förmågan att bearbeta de enskilda blocken av dessa stora filer parallellt.
För att möjliggöra effektiv bearbetning måste en balans uppnås. Å ena sidan måste blockstorleken vara tillräckligt stor för att motivera de resurser som är avsedda för en enskild databehandlingsenhet (till exempel en karta eller en reducerad uppgift). Å andra sidan kan blockstorleken inte vara så stor att systemet väntar mycket länge för en sista databehandlingsenhet för att avsluta sitt arbete.
Dessa två överväganden beror självklart på vilka typer av arbete som utförs på datablocken.