sql >> Database >  >> RDS >> Database

Hoe MapReduce werkt in Hadoop

MapReduce was een model dat door Google werd geïntroduceerd als een methode voor het oplossen van een klasse van Big Data-problemen met grote clusters van goedkope machines. Hadoop neemt dit model op in de kern van zijn werkproces. Dit artikel geeft een inleidend idee van het MapReduce-model dat Hadoop gebruikt bij het oplossen van het Big Data-probleem.

Overzicht

Een typische Big Data-toepassing heeft te maken met een grote set schaalbare gegevens. Het gebruik van een enkele database om op te slaan en op te halen kan een belangrijk knelpunt zijn bij de verwerking. Dit is met name het geval als we een monolithische database gebruiken om een ​​enorme hoeveelheid gegevens op te slaan, zoals we kunnen zien bij relationele databases en hoe ze worden gebruikt als een enkele repository. Dit gaat niet werken, vooral we hebben te maken met grote datasets in een gedistribueerde omgeving.

Google gebruikte het MapReduce-algoritme om de situatie aan te pakken en kwam met een oplossing. Het idee is om de grotere taak op te delen in kleinere beheersbare delen en deze voor verwerking over computers in het netwerk te verdelen. Het aldus verkregen resultaat wordt geïntegreerd om de uiteindelijke dataset te vormen. Dit idee werd de basis van het Hadoop-project van Doug Cutting. Hadoop gebruikt dit algoritme om gegevens parallel met anderen te verwerken om een ​​volledige statistische analyse op grote datasets te leveren. Daarom kan Hadoop grofweg in twee delen worden verdeeld:

  • Verwerking: Gebruikt door het MapReduce-algoritme
  • Opslag: Gebruikt door HDFS

Hadoop MapReduce is dus een implementatie van het algoritme dat is ontwikkeld en onderhouden door het Apache Hadoop-project. Het werkt als een machine op zich, waarbij we input leveren en de engine reageert door input snel en efficiënt om te zetten in output, door middel van meerdere fasen. Dit openlijk simplistische idee heeft een beetje uitwerking nodig als het de hele lijn volgt.

MapReduce

MapReduce is een parallel programmeermodel dat wordt gebruikt voor snelle gegevensverwerking in een gedistribueerde toepassingsomgeving. Het werkt op datasets (multi-terabytes aan gegevens) die zijn verdeeld over clusters (duizenden knooppunten) in het basishardwarenetwerk. MapReduce-programma's draaien op Hadoop en kunnen in meerdere talen worden geschreven:Java, C++, Python en Ruby. De belangrijkste kenmerken van het MapReduce-programma zijn dat het inherent de geest van parallellisme in de programma's heeft opgenomen. Dit maakt het ideaal voor grootschalige gegevensanalyse die het model van parallellisme in zijn praktijk kan gebruiken om resultaten efficiënter en sneller uit een bestaande infrastructuur te persen.

Hoe het werkt

Hadoop MapReduce verdeelt de taken in meerdere fasen, elk met een aanzienlijke reeks functies om het gewenste resultaat uit de Big Data te halen. Het werkt op knooppunten in een cluster dat wordt gehost op een verzameling basisservers. Het proces begint met het gebruikersverzoek dat de MapReduce-engine uitvoert en eindigt met het resultaat dat weer wordt opgeslagen in HDFS.

We kunnen een MapReduce-taak starten om uit te voeren door de JobClient.runJob(conf) aan te roepen methode. Dit is een handige methode om een ​​nieuwe JobClient te maken voorbeeld. Dit roept op zijn beurt submitJob() . op en peilt elke seconde de voortgang van de taak en rapporteert terug aan de console als er enige verandering is sinds het laatste rapport werd gegenereerd. Dit heeft een rimpeleffect en veroorzaakt een reeks operaties achter de schermen. De eerste stap is het vinden en lezen van het invoerbestand dat de onbewerkte gegevens bevat. Het bestandsformaat is willekeurig en moet worden geconverteerd naar een formaat dat geschikt is voor verwerking. Dit is de taak voor InputFormat en de RecordReader(RR) . Het InputFormat gebruikt de functie genaamd InputSplit om het bestand in kleinere delen te splitsen. De RecorReader(RR) transformeert vervolgens de onbewerkte gegevens en maakt deze beschikbaar voor verwerking door map .

In kaart brengen

Zodra de gegevens acceptabel zijn om te worden toegewezen, wordt een afzonderlijke instantie gemaakt voor elk invoerpaar (sleutel en waarde) en wordt de verwerking gestart. Zodra de mapping-functie uitvoer begint te produceren, wordt deze niet rechtstreeks naar de schijf geschreven; in plaats daarvan wordt het opgeslagen in de geheugenbuffer om wat voorsortering uit te voeren. Elke kaart onderhoudt een cirkelvormige buffer waar het de uitvoer omleidt. Bij het overschrijden van de drempelwaarde wordt de gemorste inhoud teruggeschreven naar de schijf. Het verdeelt de gegevens verder in partities die acceptabel zijn voor het verloopstuk waarnaar de gegevens vervolgens worden omgeleid. Al deze werken vinden echter gelijktijdig plaats op meerdere knooppunten in het Hadoop-cluster. Na het voltooien van de kaarttaken, worden de tussenresultaten verzameld in de partitie, en er wordt geschud en gesorteerd om de uitvoer te optimaliseren zodat de reductie het als invoer overneemt.

Verkleinen en samenvoegen

Wat reduce krijgt, is ook een sleutel-, waardepaar en werkt op dezelfde manier als de kaart. Het verzamelt de kaartuitvoer van verschillende kaarttaken in het cluster en begint pas met verwerken nadat het in kaart brengen is voltooid. Het heeft een set kopieerthreads om de uitvoer van de kaart samen te voegen en naar de schijf te morsen. Terwijl kopieën op schijf worden verzameld, doet een achtergrondthread het werk om ze samen te voegen tot grotere, gesorteerde bestanden. Het biedt ook de uitvoer in de vorm van een sleutel-waardepaar en moet mogelijk opnieuw worden geformatteerd door de OutputFormat voordat de toepassing het formaat kan accepteren. Het OutputFormat neemt ten slotte de sleutel, het waardepaar en schrijft de verwerkte gegevens terug naar HDFS. Hier, RecordWriter speelt de hoofdrol, net zoals RecordReader , behalve dat het in het begin deelneemt tijdens het lezen van HDFS.

Conclusie

Dit is slechts het topje van de ijsberg. Er zijn veel ingewikkelde details en er gebeurt nog veel meer achter de schermen. Kortom, Hadoop MapReduce biedt de mogelijkheid om Big Data op te splitsen in kleinere, beheersbare delen, deze parallel te verwerken op een gedistribueerd cluster en tot slot de data beschikbaar te maken voor consumptie of aanvullende verwerking. Hadoop is tegenwoordig uitgegroeid tot een groter ecosysteem van tools en technologieën om de allernieuwste Big Data-problemen op te lossen en evolueert snel om de functies ervan te verfijnen.


  1. INT vs Unique-Identifier voor ID-veld in database

  2. Hoe kan ik een tabel in Oracle beschrijven zonder de opdracht DESCRIBE te gebruiken?

  3. SQL-instructie negeert waar parameter

  4. SQL Server GUID-sorteeralgoritme. Waarom?