Verarbeiten großer verteilter Datenmengen mit Hadoop, ein Beispiel

Fazit

public class LogFileSearch {
public static final String LOG_FILE_SEARCH_BPID
= "logfilesearch.bpid";
    public static void main(String[] args)
throws IOException, ClassNotFoundException,
InterruptedException
{
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf,
args).getRemainingArgs();
if (otherArgs.length != 3) {
System.err.println(LogFileSearch.class.getSimpleName()
+ ": <in> <out> <ID>");
System.exit(-1);
}
        /* Setting the BPID as parameter to be passed to all instances. */
conf.set(LOG_FILE_SEARCH_BPID, otherArgs[2]);
        Job job = new Job(conf, LogFileSearch.class.getSimpleName());
        job.setJarByClass(LogFileSearch.class);
job.setInputFormatClass(TextInputFormat.class);
job.setMapperClass(LFSMapperSearch.class);
job.setOutputKeyClass(LFSBPKey.class);
job.setOutputValueClass(Text.class);
job.setReducerClass(LFSReducer.class);
job.setNumReduceTasks(1);
        FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileInputFormat.setInputPathFilter(job, LFSPathFilter.class);
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

Zur Ausführung des Jobs sind alle Klassen in einer Jar zu binden. Sie lassen sich über das Shell-Skript bin/hadoop mit dem folgenden Aufruf ausführen:

bin/hadoop -jar/pfad/zum/jar JobKlasse
zusätzlicheParameter

Hadoop-Jobs sind de facto Java-Anwendungen und lassen sich mit jeder bekannten IDE oder auch einem einfachen Texteditor erstellen. Einen integrierten Ansatz verfolgt Karmasphere Studio for Hadoop, das auf NetBeans-Basis eine Entwicklungsumgebung für Hadoop-Jobs und einen JobManager für ihre Ausführung im Cluster bietet.

Erste MapReduce-Jobs sind leicht zu realisieren und die programmiertechnischen Hürden gering, da für die ersten Schritte die Standardklassen der Hadoop-API ausreichend sind. Darüber hinaus gehende Anforderungen wie eigene Eingabe- und Ausgabeformate können Entwickler über vorgegebene Interfaces implementieren. Ebenso haben sie die Möglichkeit, das Verhalten von Hadoop über Eigenimplementierungen und deren Angabe in den Konfigurationsdateien an eigene Bedürfnisse anzupassen.

Den positiven Punkten gegenüber steht eine noch unberechenbare API. Die Änderungen in der Version 0.20.1 sind nicht vollständig kompatibel zu den Vorgängerversionen. Auch für die Zukunft dürften Änderungen zu erwarten sein, da Hadoop aktiv weiterentwickelt wird. Die sich daraus ergebenden Fragen sind Diskussionsgegenstand auf den Mailinglisten des Projekts, die zu verfolgen empfehlenswert ist.

Doch sollten die Punkte einem Einsatz nicht im Wege stehen, da Hadoop Aufgaben bearbeitet, für die es bis jetzt nur wenige Alternativen gibt, die hinsichtlich Nutzergemeinde und Verbreitung vergleichbar fortgeschritten sind.

Oliver Fischer
arbeitet in Berlin und ist über www.swe-blog.net zu erreichen. Für wertvolle Kritik und Ergänzungen zum Artikel bedankt er sich bei Isabel Drost.