I modsætning til ethvert I/O-undersystem kommer Hadoop også med et sæt primitiver. Disse primitive overvejelser, selvom de er generiske, går selvfølgelig også sammen med Hadoop IO-systemet med en speciel konnotation. Hadoop beskæftiger sig med multi-terabytes af datasæt; en særlig overvejelse af disse primitiver vil give en idé om, hvordan Hadoop håndterer datainput og -output. Denne artikel skimmer hurtigt over disse primitiver for at give et perspektiv på Hadoop input-outputsystemet.
Dataintegritet
Dataintegritet betyder, at data skal forblive nøjagtige og konsistente på tværs af dets lagring, behandling og genfindingsoperationer. For at sikre, at ingen data går tabt eller beskadiges under persistens og behandling, opretholder Hadoop strenge dataintegritetsbegrænsninger. Hver læse-/skriveoperation finder sted på diske, mere så gennem netværket er der risiko for fejl. Og mængden af data, som Hadoop håndterer, forværrer kun situationen. Den sædvanlige måde at opdage korrupte data på er gennem kontrolsummer. En kontrolsum beregnes, når data først kommer ind i systemet og sendes over kanalen under genfindingsprocessen. Den hentende ende beregner kontrolsummen igen og matcher med de modtagne. Hvis det matcher nøjagtigt, er dataene, der anses for at være fejlfrie, ellers indeholder de fejl. Men problemet er - hvad hvis selve kontrolsummen, der sendes, er korrupt? Dette er højst usandsynligt, fordi det er små data, men ikke en ubestridelig mulighed. Brug af den rigtige slags hardware såsom ECC-hukommelse kan bruges til at afhjælpe situationen.
Dette er blot påvisning. Derfor bruges en anden teknik, kaldet CRC (Cyclic Redundancy Check), for at rette fejlen.
Hadoop tager det videre og opretter en særskilt kontrolsum for hver 512 (standard) bytes af data. Fordi CRC-32 kun er på 4 bytes, er lageromkostningerne ikke et problem. Alle data, der kommer ind i systemet, verificeres af datanoderne, inden de videresendes til lagring eller videre behandling. Data, der sendes til datanode-pipelinen, verificeres gennem kontrolsummer, og enhver fundet korruption meddeles straks til klienten med ChecksumException . Klienten læst fra datanoden gennemgår også den samme øvelse. Dataanoderne opretholder en log over kontrolsumverifikation for at holde styr på den verificerede blok. Loggen opdateres af datanoden ved modtagelse af et blokverifikationssuccessignal fra klienten. Denne type statistik hjælper med at holde de dårlige diske på afstand.
Ud over dette foretages en periodisk verifikation på blokbutikken ved hjælp af DataBlockScanner kører sammen med datanode-tråden i baggrunden. Dette beskytter data mod korruption i det fysiske lagermedie.
Hadoop vedligeholder en kopi eller replikaer af data. Dette bruges specifikt til at gendanne data fra massiv korruption. Når klienten opdager en fejl under læsning af en blok, rapporterer den straks til datanoden om den dårlige blok fra namenode, før den kaster ChecksumException . Navnenoden markerer den derefter som en dårlig blok og planlægger enhver yderligere reference til blokken til dens replikaer. På denne måde vedligeholdes replikaen med andre replikaer, og den markerede dårlige blok fjernes fra systemet.
For hver fil oprettet i Hadoop LocalFileSystem , en skjult fil med samme navn i samme mappe med filtypenavnet .
Kompression
Når man husker på mængden af data, som Hadoop beskæftiger sig med, er komprimering ikke en luksus, men et krav. Der er mange indlysende fordele ved filkomprimering med rette brugt af Hadoop. Det sparer lagringskravene og er en must-have-funktion til at fremskynde datatransmission over netværket og diske. Der er mange værktøjer, teknikker og algoritmer, der almindeligvis bruges af Hadoop. Mange af dem er ret populære og er blevet brugt til filkomprimering gennem tiderne. For eksempel bruges gzip, bzip2, LZO, zip og så videre ofte.
Serialisering
Processen, der omdanner strukturerede objekter til strøm af bytes, kaldes serialisering . Dette er specifikt påkrævet til datatransmission over netværket eller vedvarende rådata på diske. Deserialisering er bare den omvendte proces, hvor en strøm af bytes omdannes til et struktureret objekt. Dette er især nødvendigt for objektimplementering af de rå bytes. Derfor er det ikke overraskende, at distribueret databehandling bruger dette på et par adskilte områder:kommunikation mellem processer og datapersistens.
Hadoop bruger RPC (Remote Procedure Call) til at etablere inter-proces kommunikation mellem noder. Derfor bruger RPC-protokollen processen med serialisering og deserialisering til at gengive en besked til strømmen af bytes og omvendt og sende den på tværs af netværket. Processen skal dog være kompakt nok til at udnytte netværkets båndbredde bedst muligt, samt hurtig, interoperabel og fleksibel til at kunne rumme protokolopdateringer over tid.
Hadoop har sit eget kompakte og hurtige serialiseringsformat, Writables , som MapReduce-programmer bruger til at generere nøgler og værdityper.
Datastruktur af filer
Der er et par højniveau-containere, der udvikler den specialiserede datastruktur i Hadoop til at indeholde specielle typer data. For at vedligeholde en binær log f.eks. SequenceFile container leverer datastrukturen til at bevare binære nøgleværdi-par. Vi kan derefter bruge nøglen, såsom et tidsstempel repræsenteret af LongWritable og værdi efter Skrivbar , som refererer til logget mængde.
Der er en anden container, en sorteret afledning af SequenceFile , kaldet MapFile . Det giver et indeks for praktiske opslag efter nøgle.
Disse to containere er interoperable og kan konverteres til og fra hinanden.
Konklusion
Dette er blot et hurtigt overblik over input/output-systemet i Hadoop. Vi vil dykke ned i mange indviklede detaljer i efterfølgende artikler. Det er ikke særlig svært at forstå Hadoop input/output systemet, hvis man har en grundlæggende forståelse for I/O systemer generelt. Hadoop puttede simpelthen noget ekstra juice til det for at holde trit med dets distribuerede natur, der fungerer i massivt omfang af data. Det er alt.
Reference
Hvid, Tom. Hadoop, The Definitive Guide, 2009 . O'Reilly Publications.