Big data: MapReduce

Beschikbaar

3.1 Geschiedenis van het ontstaan ​​van de term BigData

De term Big Data verscheen relatief recent. Google Trends toont het begin van een actieve groei in het gebruik van de uitdrukking sinds 2011:

Tegelijkertijd gebruikt alleen de luie de term nu niet. Vooral vaak wordt de term ongepast gebruikt door marketeers. Dus wat is Big Data eigenlijk? Aangezien ik heb besloten om het probleem systematisch te benoemen en te benadrukken, is het noodzakelijk om het concept te definiëren.

In mijn praktijk kwam ik verschillende definities tegen:

  • Big Data is wanneer er meer dan 100 GB aan gegevens is (500 GB, 1 TB, wat u maar wilt).
  • Big Data zijn gegevens die niet in Excel verwerkt kunnen worden.
  • Big Data zijn gegevens die niet op één computer kunnen worden verwerkt.

En zelfs deze:

  • Big Data zijn over het algemeen alle gegevens.
  • Big Data bestaat niet, het is uitgevonden door marketeers.

Ik blijf bij de definitie van wikipedia:

Big data is een reeks benaderingen, hulpmiddelen en methoden voor het verwerken van gestructureerde en ongestructureerde gegevens van enorme hoeveelheden en aanzienlijke diversiteit om door mensen waarneembare resultaten te verkrijgen die effectief zijn in omstandigheden van continue groei, distributie over talrijke knooppunten van een computernetwerk, gevormd in de late jaren 2000, alternatief voor traditionele databasebeheersystemen en oplossingen voor business intelligence.

Onder Big Data versta ik dus niet een specifieke hoeveelheid gegevens en zelfs niet de gegevens zelf, maar methoden om ze te verwerken, die een gedistribueerde verwerking van informatie mogelijk maken. Deze methoden kunnen zowel op grote datasets (zoals de inhoud van alle pagina's op internet) als op kleine datasets (zoals de inhoud van dit college) worden toegepast.

Hier zijn enkele voorbeelden van wat een gegevensbron zou kunnen zijn waarvoor big data-technieken nodig zijn:

  • Logboeken van gebruikersgedrag op internet
  • GPS-signalen van auto's voor een transportbedrijf
  • Gegevens afkomstig van sensoren in de Large Hadron Collider
  • Gedigitaliseerde boeken in de Russische Staatsbibliotheek
  • Informatie over transacties van alle bankklanten
  • Informatie over alle aankopen in een grote winkelketen, enz.

Het aantal gegevensbronnen groeit snel, wat betekent dat er steeds meer vraag is naar technologieën voor gegevensverwerking.

3.2 Big data-principes

Op basis van de definitie van Big Data kunnen we de basisprincipes van het werken met zulke data formuleren:

1. Horizontale schaalbaarheid. Aangezien er een willekeurig grote hoeveelheid gegevens kan zijn, moet elk systeem waarbij grote gegevens worden verwerkt, uitbreidbaar zijn. Het datavolume nam met 2 keer toe - de hoeveelheid ijzer in het cluster werd met 2 keer verhoogd en alles bleef werken.

2. Fouttolerantie. Het principe van horizontale schaalbaarheid houdt in dat er veel machines in een cluster kunnen staan. Het Hadoop-cluster van Yahoo heeft bijvoorbeeld meer dan 42.000 machines (u kunt de clustergroottes van verschillende organisaties bekijken via deze link). Dit betekent dat sommige van deze machines gegarandeerd uitvallen. Big data-praktijken moeten zich bewust zijn van deze verstoringen en ze overleven zonder noemenswaardige gevolgen.

3. Gegevenslocatie. In grote gedistribueerde systemen worden gegevens verdeeld over een groot aantal machines. Als de gegevens zich fysiek op de ene server bevinden en op een andere worden verwerkt, kunnen de kosten van gegevensoverdracht hoger zijn dan de kosten van de verwerking zelf. Daarom is een van de belangrijkste principes voor het ontwerpen van BigData-oplossingen het principe van datalokaliteit - indien mogelijk verwerken we gegevens op dezelfde machine waarop we ze opslaan.

Alle moderne big data-tools volgen deze drie principes op de een of andere manier. Om ze te volgen, is het noodzakelijk om enkele methoden, methoden en paradigma's te bedenken voor het ontwikkelen van hulpmiddelen voor gegevensontwikkeling. Een van de meest klassieke methoden die ik in de lezing van vandaag zal analyseren.

3.3 MapReduce

MapReduce is een door Google voorgesteld gedistribueerd gegevensverwerkingsmodel voor het verwerken van grote hoeveelheden gegevens op computerclusters. MapReduce wordt goed geïllustreerd door de volgende afbeelding:

MapReduce gaat ervan uit dat de gegevens zijn georganiseerd in enkele records. Gegevensverwerking vindt plaats in 3 fasen:

1. Kaartfase . In dit stadium worden de gegevens voorverwerkt met behulp van de functie map() die door de gebruiker wordt gedefinieerd. Het werk van deze fase is het voorbewerken en filteren van de gegevens. De bewerking lijkt erg op de kaartbewerking in functionele programmeertalen - een aangepaste functie wordt toegepast op elk invoerrecord.

De functie map() die wordt toegepast op een enkele invoerrecord, produceert veel sleutel-waardeparen. Set - dat wil zeggen, het kan slechts één record retourneren, het kan niets retourneren, of het kan meerdere sleutel-waardeparen retourneren. Wat er in de sleutel en in de waarde komt, is aan de gebruiker, maar de sleutel is heel belangrijk, aangezien gegevens met één sleutel in de toekomst in één instantie van de reduce-functie zullen vallen.

2. Podiumshuffle. Het blijft onopgemerkt door de gebruiker. In deze fase wordt de uitvoer van de kaartfunctie "gebind" - elke bak komt overeen met één uitvoersleutel van de kaartfase. In de toekomst zullen deze manden dienen als input voor verkleining.

3. Trap afbouwen. Elke "mand" met waarden gegenereerd in de shuffle-fase komt bij de invoer van de functie reduce().

De verkleinfunctie wordt door de gebruiker gegeven en berekent het eindresultaat voor een enkele "mand" . De set van alle waarden die worden geretourneerd door de functie reduce() is het uiteindelijke resultaat van de MapReduce-taak.

Enkele aanvullende feiten over MapReduce:

  1. Alle uitvoeringen van de kaartfunctie werken onafhankelijk en kunnen parallel worden uitgevoerd, ook op verschillende clustermachines.
  2. Alle uitvoeringen van de reduce- functie werken onafhankelijk en kunnen parallel worden uitgevoerd, ook op verschillende clustermachines.
  3. Shuffle vertegenwoordigt intern een parallelle sortering, dus het kan ook op verschillende clustermachines werken. Met punten 1-3 kunt u het principe van horizontale schaalbaarheid implementeren .
  4. De kaartfunctie wordt meestal gebruikt op dezelfde machine waarop de gegevens zijn opgeslagen - dit vermindert de overdracht van gegevens via het netwerk (het principe van gegevenslokaliteit).
  5. MapReduce is altijd een volledige datascan, er zijn geen indexen. Dit betekent dat MapReduce slecht toepasbaar is wanneer zeer snel moet worden gereageerd.

3.4 Voorbeelden van taken die effectief zijn opgelost met MapReduce

Aantal woorden

Laten we beginnen met de klassieke taak - Word Count. De opdracht is als volgt geformuleerd: er is een groot corpus aan documenten. De taak is om het totale aantal keren te berekenen dat het in het corpus voorkomt voor elk woord dat minstens één keer in het corpus voorkomt.

Oplossing:

Aangezien we een groot corpus aan documenten hebben, laat één document één invoerrecord zijn voor de MapRreduce-taak. In MapReduce kunnen we alleen door de gebruiker gedefinieerde functies definiëren, wat we zullen doen (we zullen python-achtige pseudocode gebruiken):

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

De kaartfunctie verandert het invoerdocument in een reeks paren (woord, 1), shuffle transparant voor ons verandert het in paren (woord, [1,1,1,1,1,1]), verminder de som van deze enen, retourneer het definitieve antwoord voor het woord .

Logboeken van het advertentiesysteem verwerken

Het tweede voorbeeld is ontleend aan de praktijk van de Data-Centric Alliance.

Taak: er is een csv-logboek van het advertentiesysteem van het formulier:

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

Het is noodzakelijk om de gemiddelde kosten van het weergeven van advertenties in de steden van Rusland te berekenen.

Oplossing:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

De kaartfunctie controleert of we deze invoer nodig hebben - en als dat zo is , laat het alleen de noodzakelijke informatie achter (stad en betalingsbedrag). De functie verkleinen berekent het definitieve antwoord voor een stad op basis van een lijst met alle betalingen in die stad.

Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen