Abstract (german)
Apache Hadoop ist ein Cluster-System zur verteilten und parallelen Verarbeitung von riesigen Datenmengen. Neben zahlreichen Funktionen stellt es ein MapReduce-Framework und ein verteiltes Dateisystem bereit, mit Hilfe dessen Programme (Jobs) zur Datenverarbeitung programmiert werden können. Für einfache Jobs genügt es bereits, die zwei Methoden map und reduce zu implementieren.
Open Computing Language (OpenCL) ist eine Programmierplattform mit zugehöriger Programmiersprache zur Programmierung paralleler Hardware wie Mehrkernprozessoren oder Grafikprozessoren (GPU). Wenn die Verarbeitung mit Hilfe von OpenCL auf Grafikprozessoren stattfindet, fällt dies in den Bereich von General Purpose Computation on Graphics Processing Unit (GPGPU). Somit wird die Grafikkarte neben ihrer Hauptaufgabe, der Berechnung zur Bildausgabe, für allgemeine Berechnungen genutzt, die zuvor nur von Hauptprozessoren ausgeführt werden konnten. Bei geeigneten Problemen und unter Verwendung paralleler Algorithmen kann mit Grafikprozessoren eine enorme Steigerung der Rechenleistung im Vergleich zu Hauptprozessoren erzielt werden.
Die vorliegende Arbeit beschreibt verschiedene Möglichkeiten, wie ein MapReduce-Job durch eine Grafikkarte beschleunigt werden kann. Anhand des k-Means-Verfahrens zur Clusteranalyse und einer numerischen Integration wird die Parallelisierung eines Tasks praktisch untersucht. Dabei werden die Berechnungen der map- oder reduce-Methode vom Grafikprozessor ausgeführt. Die Implementierungen verwenden die JNA-Bibliothek JavaCL zur Anbindung der OpenCL-API in Java. Am aufwendigsten ist die Entwicklung einer Speicherverwaltung zur Datenübertragung zwischen Haupt- und Grafikkartenspeicher. Eine Übertragung großer zusammenhängender Daten durch einen Puffer hat sich als performante Lösung bewährt. Die zwei Beispiel-Jobs mit GPU-Beschleunigung erreichten einen Speedup von 6,5 bis 7,5 im Vergleich zu der Implementierung ohne OpenCL.