sql >> Databasteknik >  >> RDS >> Database

Förstå Hadoop Input Output System

Till skillnad från alla I/O-undersystem kommer Hadoop också med en uppsättning primitiver. Dessa primitiva överväganden, även om de är generiska till sin natur, går med Hadoop IO-systemet också med en speciell konnotation till det, naturligtvis. Hadoop hanterar multi-terabyte av datamängder; en särskild övervägande om dessa primitiver kommer att ge en uppfattning om hur Hadoop hanterar datainmatning och -utdata. Den här artikeln skummar snabbt över dessa primitiver för att ge ett perspektiv på Hadoop-inmatningssystemet.

Dataintegritet

Dataintegritet betyder att data ska förbli korrekta och konsekventa över hela dess lagring, bearbetning och hämtning. För att säkerställa att ingen data går förlorad eller skadas under beständighet och bearbetning, upprätthåller Hadoop stränga begränsningar för dataintegritet. Varje läs-/skrivoperation sker på diskar, mer så genom nätverket är risken för fel. Och mängden data som Hadoop hanterar förvärrar bara situationen. Det vanliga sättet att upptäcka korrupta data är genom kontrollsummor. En kontrollsumma beräknas när data först kommer in i systemet och skickas över kanalen under hämtningsprocessen. Den hämtande änden beräknar kontrollsumman igen och matchar med de mottagna. Om det stämmer exakt överensstämmer uppgifterna som anses vara felfria, annars innehåller de fel. Men problemet är – vad händer om själva kontrollsumman som skickas är korrupt? Detta är högst osannolikt eftersom det är en liten data, men inte en obestridlig möjlighet. Att använda rätt typ av hårdvara som ECC-minne kan användas för att lindra situationen.

Detta är bara upptäckt. För att korrigera felet används därför en annan teknik, kallad CRC (Cyclic Redundancy Check).

Hadoop tar det längre och skapar en distinkt kontrollsumma för varje 512 (standard) byte med data. Eftersom CRC-32 endast är på 4 byte är lagringsoverheaden inget problem. All data som kommer in i systemet verifieras av datanoderna innan den vidarebefordras för lagring eller vidare bearbetning. Data som skickas till datanodpipelinen verifieras genom kontrollsummor och eventuell korruption som hittas meddelas omedelbart till klienten med ChecksumException . Klienten som läses från datanoden går också igenom samma övning. Datanoderna upprätthåller en logg över kontrollsummaverifiering för att hålla reda på det verifierade blocket. Loggen uppdateras av datanoden vid mottagande av en framgångssignal för blockverifiering från klienten. Denna typ av statistik hjälper till att hålla de dåliga diskarna borta.

Förutom detta görs en periodisk verifiering på blockbutiken med hjälp av DataBlockScanner löper tillsammans med datanod-tråden i bakgrunden. Detta skyddar data från korruption i det fysiska lagringsmediet.

Hadoop underhåller en kopia eller repliker av data. Detta används specifikt för att återställa data från massiv korruption. När klienten upptäcker ett fel vid läsning av ett block, rapporterar den omedelbart till datanoden om det dåliga blocket från namnnoden innan den kastar ChecksumException . Namnnoden markerar det sedan som ett dåligt block och schemalägger ytterligare referenser till blocket till dess repliker. På detta sätt bibehålls repliken med andra repliker och det markerade dåliga blocket tas bort från systemet.

För varje fil som skapas i Hadoop LocalFileSystem , en dold fil med samma namn i samma katalog med filtillägget ..crc är skapad. Den här filen upprätthåller kontrollsumman för varje databit (512 byte) i filen. Underhållet av metadata hjälper till att upptäcka läsfel innan du kastar ChecksumException av LocalFileSystem .

Kompression

Med tanke på mängden data som Hadoop hanterar är komprimering inte en lyx utan ett krav. Det finns många uppenbara fördelar med filkomprimering som med rätta används av Hadoop. Det sparar lagringskrav och är en måste-ha-kapacitet för att påskynda dataöverföringen över nätverket och diskarna. Det finns många verktyg, tekniker och algoritmer som ofta används av Hadoop. Många av dem är ganska populära och har använts i filkomprimering genom tiderna. Till exempel, gzip, bzip2, LZO, zip och så vidare används ofta.

Serialisering

Processen som omvandlar strukturerade objekt till ström av byte kallas serialisering . Detta krävs specifikt för dataöverföring över nätverket eller kvarstående rådata på diskar. Deserialisering är bara den omvända processen, där en ström av bytes omvandlas till ett strukturerat objekt. Detta krävs särskilt för objektimplementering av råbyte. Därför är det inte förvånande att distribuerad datoranvändning använder detta inom ett par distinkta områden:kommunikation mellan processer och databeständighet.

Hadoop använder RPC (Remote Procedure Call) för att skapa interprocesskommunikation mellan noder. Därför använder RPC-protokollet processen med serialisering och deserialisering för att återge ett meddelande till strömmen av bytes och vice versa och skicka det över nätverket. Processen måste dock vara tillräckligt kompakt för att använda nätverkets bandbredd på bästa sätt, samt snabb, interoperabel och flexibel för att ta emot protokolluppdateringar över tid.

Hadoop har sitt eget kompakta och snabba serialiseringsformat, Writables , som MapReduce-program använder för att generera nycklar och värdetyper.

Datastruktur för filer

Det finns ett par behållare på hög nivå som utvecklar den specialiserade datastrukturen i Hadoop för att hålla speciella typer av data. Till exempel, för att underhålla en binär logg, SequenceFile container tillhandahåller datastrukturen för att bevara binära nyckel-värdepar. Vi kan sedan använda nyckeln, till exempel en tidsstämpel som representeras av LongWritable och värde efter Writable , som hänvisar till loggad kvantitet.

Det finns en annan behållare, en sorterad härledning av SequenceFile , kallad MapFile . Den tillhandahåller ett index för bekväma uppslagningar med nyckel.

Dessa två behållare är interoperabla och kan konverteras till och från varandra.

Slutsats

Det här är bara en snabb översikt av Hadoops input/output-system. Vi kommer att fördjupa oss i många intrikata detaljer i efterföljande artiklar. Det är inte särskilt svårt att förstå Hadoop input/output-systemet om man har en grundläggande förståelse för I/O-system i allmänhet. Hadoop satte helt enkelt lite extra juice till den för att hålla jämna steg med dess distribuerade natur som fungerar i massiv dataskala. Det är allt.

Referens

Vit, Tom. Hadoop, The Definitive Guide, 2009 . O’Reilly Publications.


  1. Vad är MariaDB Temporal Tables?

  2. Hur utför jag en GROUP BY på en aliasad kolumn i MS-SQL Server?

  3. (engelska) Hur man använder Oracle Database 19c Pre-Built Developer VM

  4. MySQL Ändra användarlösenord