mapreduceAan de slag met mapreduce


Opmerkingen

Deze sectie geeft een overzicht van wat mapreduce is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen mapreduce vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de documentatie voor mapreduce nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Installatie of instellingen

Mapreduce is een onderdeel van Hadoop. Dus wanneer Apache Hadoop (of een distributie van Hadoop is geïnstalleerd) wordt MR automatisch geïnstalleerd.

MapReduce is het raamwerk voor gegevensverwerking via HDFS (Hadoop gedistribueerd bestandssysteem). MR-banen misschien geschreven met behulp van Java, python, Scala, R, enz.

Wat doet mapreduce en hoe?

Mapreduce is een programmeermodel voor het verwerken van (zeer) grote hoeveelheden gegevens.

Traditionele 'HPC' (High Performance Computing) versnelt grote berekeningen voor relatief grote hoeveelheden gegevens door een set sterk verbonden computers te maken (met dingen als extreem snel netwerken en snelle toegang tot gedeelde opslag, gedeeld geheugen) om computerproblemen aan te pakken die vereisen meestal berekeningen om toegang te hebben tot elkaars gegevens. Een klassiek voorbeeld is weersvoorspelling.

Mapreduce daarentegen blinkt uit in het verwerken van relatief kleine, onafhankelijke berekeningen op enorme hoeveelheden gegevens. Om dit mogelijk te maken, worden de gegevens verspreid over vele computers (vanwege de hoeveelheid gegevens) en wordt de gewenste berekening opgesplitst in een fase die onafhankelijk van elk gegeven kan worden uitgevoerd (de 'kaart'-fase). De resultaten van deze onafhankelijke berekeningen worden vervolgens verzameld en een tweede deel van de berekeningen wordt gedaan om al deze individuele resultaten te combineren tot het eindresultaat (de 'verkleinen' fase).


Voorbeeld: stemmen tellen

Stel je voor dat je heel veel stemmen moet tellen en er is wat werk om elke stem te tellen (bijvoorbeeld uit de gescande afbeelding achterhalen welk vakje is aangevinkt).

In dit geval zou een mapreduce-implementatie:

Stap 1: 'Spread'

Verspreid de te verwerken afbeeldingen over de beschikbare computers.

Stap 2: 'Kaart'

Op elke computer, voor elke afbeelding:

  • neem 1 van de naar deze computer gekopieerde afbeeldingen als invoer
  • ontdek welk vakje is aangevinkt
  • voer het nummer (of code of naam) uit van het item waarop is gestemd

Merk op dat het werk kan beginnen zodra een computer 1 afbeelding krijgt om aan te werken. Het is niet nodig dat al deze computers met elkaar communiceren om hun werk te doen, dus ze hoeven niet snel met elkaar te zijn verbonden, gedeeld geheugen of gedeelde schijfruimte te hebben.

Stap 3: 'Verzamelen'

Verzamel al deze uitgangen op 1 computer.

Stap 4: 'Verminderen'

Tel hoeveel stemmen voor elk nummer (of code of naam) er zijn.

Dit zeer eenvoudige voorbeeld laat ook zien hoe verdere optimalisaties vaak mogelijk zijn. In dit geval kan de reductiestap zelf duidelijk gedeeltelijk op elke computer worden uitgevoerd, en vervolgens kan een laatste reductie op een centrale computer worden uitgevoerd. Dit vermindert zowel de hoeveelheid werk op de ene computer waarop de verkleiningsstap wordt uitgevoerd, als de hoeveelheid gegevens die via het netwerk moet worden getransporteerd.


Voorbeeld: stemmen tellen - geoptimaliseerd (met behulp van combiner)

Stap 1: 'Spread'

Hetzelfde als voorheen: verspreid de te verwerken afbeeldingen over de beschikbare computers.

Stap 2: 'Kaart'

Hetzelfde als voorheen: op elke computer, voor elke afbeelding:

  • neem 1 van de naar deze computer gekopieerde afbeeldingen als invoer
  • ontdek welk vakje is aangevinkt
  • voer het nummer (of code of naam) uit van het item waarop is gestemd

Stap 3: 'Verzamel' lokaal

Verzamel alle uitgangen van 1 computer op de computer zelf.

Stap 4: Lokaal verkleinen

Tel hoeveel stemmen van elk nummer (of code of naam) er zijn in de lokale resultaten en voer deze tellingen uit.

Stap 5: 'Verzamel' wereldwijd

Verzamel alle uitgangen van de lokale reducties op 1 computer.

Stap 6: 'Reduceer' wereldwijd

Vat de lokaal gemaakte tellingen van stemmen van elk nummer (of code of naam) samen.


Merk op dat het in stap 3 niet nodig is om op alle resultaten te wachten in een van de onderstaande gevallen:

  • als dit teveel wordt voor de lokale bronnen van computers zoals opslag / geheugen
  • als de kosten van het werk dat moet worden overgedaan wanneer een computer defect raakt, te hoog worden geacht om op alle lokale resultaten te wachten
  • als het netwerk nu vrij is om tussentijdse resultaten te transporteren

het lokaal verzamelen en lokaal verkleinen kan worden gedaan op de resultaten die tot nu toe op de lokale computer zijn geproduceerd, en dit kan op elk moment worden gedaan.

De lokale verkleiningsstap wordt de combinatiestap genoemd. Dit is een optionele stap die wordt gebruikt om de prestaties te verbeteren.