Database Reference
In-Depth Information
Wir haben nun die Hotel-Daten erzeugt, auf die wir Mapreduce anwenden
wollen.
Einführung in Mapreduce
Einer von Googles nachhaltigsten Beiträgen zur Informatik ist die Populari-
sierung von Mapreduce als algorithmisches Framework zur parallelen Aus-
führung von Jobs auf mehreren Knoten. Es wird in Googles bahnbrechender
Abhandlung 7 erläutert und wurde zu einem wertvollen Tool für die Ausfüh-
rung von Queries bei partitionstoleranten Datenspeichern.
Mapreduce zerlegt Probleme in zwei Teile. Im ersten Teil wird eine Liste von
Daten über eine map() -Funktion in eine andere Art von Liste umgewandelt.
Im zweiten Teil wird diese zweite Liste über die reduce() -Funktion in einen
oder mehrere Skalarwerte umgewandelt. Nach diesem Muster kann ein Sys-
tem Aufgaben in kleinere Komponenten zerlegen und parallel in einem Ser-
ver-Cluster ausführen. Wir könnten alle Riak-Werte, die {country : 'CA'}
enthalten, zählen, indem wir jedes passende Dokument auf {count : 1} ab-
bilden (map) und dann die Summe aller counts berechnen (reduce).
Sind 5012 kanadische Werte in unseren Daten enthalten, wäre das Reduce-
Ergebnis also {count : 5012} .
map = function(v) {
var parsedData = JSON.parse(v.values[0].data);
if(parsedData.country === 'CA')
return [{count : 1}];
else
return [{count : 0}];
}
reduce = function(mappedVals) {
var sums = {count : 0};
for (var i in mappedVals) {
sums[count] += mappedVals[i][count];
}
return [sums];
}
In gewisser Hinsicht ist Mapreduce das Gegenteil von dem, wie wir Que-
ries normalerweise ausführen. Ein Ruby on Rails-System könnte Daten (über
sein ActiveRecord-Interface) wie folgt abrufen:
# Baue Hash auf, der Raumkapazität und Raumtyp veknüpft
capacity _ by _ style = {}
rooms = Room.all
for room in rooms
total _ count = capacity _ by _ style[room.style]
7. http://research.google.com/archive/mapreduce.html
Search WWH ::




Custom Search