Wanneer u een bestand opslaat in HDFS, splitst het systeem het op in een set individuele blokken en slaat deze blokken op in verschillende slaafknooppunten in het Hadoop-cluster. Dit is normaal, omdat alle bestandssystemen bestanden in blokken onderverdelen voordat ze op schijf worden opgeslagen.
HDFS heeft geen idee (en maakt zich niet druk) wat er in het bestand is opgeslagen, dus onbewerkte bestanden worden niet opgesplitst volgens regels die wij mensen zouden begrijpen. Mensen willen bijvoorbeeld recordgrenzen - de regels die aangeven waar een record begint en eindigt - om gerespecteerd te worden.
HDFS is zich er vaak niet van bewust dat het laatste record in één blok mogelijk slechts een gedeeltelijk record is, terwijl de rest van de inhoud naar het volgende blok is weggeschoten. HDFS wil er alleen voor zorgen dat bestanden worden gesplitst in blokken van gelijke grootte die overeenkomen met de vooraf gedefinieerde blokgrootte voor de Hadoop-instantie (tenzij een aangepaste waarde is ingevoerd voor het bestand dat wordt opgeslagen). In de voorgaande afbeelding is die blokgrootte 128 MB.
Niet elk bestand dat u moet opslaan, is een exact veelvoud van de blokgrootte van uw systeem, dus het laatste gegevensblok voor een bestand gebruikt slechts zoveel ruimte als nodig is. In het geval van de voorgaande afbeelding is het laatste datablok 1 MB.
Het concept van het opslaan van een bestand als een verzameling blokken komt volledig overeen met de manier waarop bestandssystemen normaal werken. Maar wat anders is aan HDFS is de schaal. Een typische blokgrootte die u zou zien in een bestandssysteem onder Linux is 4 KB, terwijl een typische blokgrootte in Hadoop 128 MB is. Deze waarde kan worden geconfigureerd en kan worden aangepast, zowel als nieuwe systeemstandaard als aangepaste waarde voor afzonderlijke bestanden.
Hadoop is ontworpen om gegevens op te slaan op de petabyte-schaal, waar mogelijke beperkingen voor opschaling tot een minimum worden beperkt. De hoge blokgrootte is een rechtstreeks gevolg van deze behoefte om gegevens op grote schaal op te slaan.
Allereerst heeft elk gegevensblok dat is opgeslagen in HDFS zijn eigen metagegevens en moet het worden bijgehouden door een centrale server, zodat toepassingen die toegang moeten hebben tot een specifiek bestand kunnen worden geleid naar alle blokken van het bestand die zijn opgeslagen. Als de blokgrootte in het kilobyte-bereik lag, zouden zelfs bescheiden gegevensvolumes in de terabyte-schaal de metadataserver te veel overweldigen om te volgen.
Ten tweede is HDFS zo ontworpen dat een hoge doorvoer mogelijk is, zodat de parallelle verwerking van deze grote gegevenssets zo snel mogelijk gebeurt. De sleutel tot de schaalbaarheid van Hadoop aan de kant van de gegevensverwerking is, en zal altijd zijn, parallellisme - de mogelijkheid om de individuele blokken van deze grote bestanden parallel te verwerken.
Om efficiënte verwerking mogelijk te maken, moet een balans worden gevonden. Aan de ene kant moet de blokgrootte groot genoeg zijn om de middelen die aan een individuele eenheid voor gegevensverwerking zijn toegewezen (bijvoorbeeld een kaart of taakvermindering) te rechtvaardigen. Aan de andere kant kan de blokgrootte niet zo groot zijn dat het systeem heel lang wacht totdat een laatste eenheid gegevensverwerking zijn werk heeft voltooid.
Deze twee overwegingen hangen uiteraard af van het soort werk dat aan de datablokken wordt gedaan.