Big Data in der Praxis

Big Data in der Praxis

Im Internet, in Zeitschriften, auf Fachkonferenzen und in Vorlesungssälen macht der Begriff Big Data in den letzten Jahren die Runde. Was unter anderem durch den NSA-Skandal leicht verteufelt wurde, wird anderenorts als Chance gesehen, Daten verarbeiten zu können, die früher lediglich archiviert und nicht mehr angefasst wurden, da deren schiere Größe und dem damit einhergehenden Verarbeitungsaufwand den Nutzen weit übertrafen. Durch das Apache Projekt Hadoop wurde der Open-Source-Community ein Werkzeug an die Hand gegeben, um diesen Datenmengen Herr zu werden und langsam aber sicher entwickelte sich so ein ganzes Eco-System an Tools und Bibliotheken um Hadoop herum, das auf die ein oder andere Art und Weise ein eigenes Problem von Big Data addressierte.

Ein Buch für Techis

Wie aber werden diese Werkzeuge eingesetzt? Und welche adressieren welche Herausforderung? Wie funktionieren sie im Zusammenspiel und was gilt es bei der entsprechenden Konfiguration der Gesamtarchitektur zu beachten?

All diese Themen möchte ich in meinem Buch Big Data in der Praxis diskutieren und richte mich damit ganz klar an die Menschen, die wirklich praktisch mit den verschiedenen Anwendungen arbeiten wollen. Anhand von 18 Beispielprojekten, die auf der beiliegenden DVD mitgeliefert werden, erkläre ich unter anderem die Verwendung von Hadoop samt dem Schreiben von Map-Reduce-Jobs und YARN-Anwendungen, den Einsatz von Hive und HBase und ebenso die Installation und Verwendung von Sqoop. Neben den Beispielprojekten finden Sie auf der DVD ebenfalls rund 80 Minuten Video-Tutorials, die sie durch die mitunter komplexe Installation und Konfiguration der einzelnen Programme führen.

Unstrukturierte Daten und Informationsgewinnung

Neben diesen mehr oder weniger bekannten Werkzeugen möchte ich jedoch auch einige Möglichkeiten aufzeigen, wie unstrukturierte Daten verarbeitet werden. So wird mit Apache OpenNLP eine Sentiment-Analyse für Fließtext durchgeführt oder eine Mustererkennung von Texten auf Basis von Apache UIMA. Es wird weiterhin demonstriert, wie Wissensdatenbanken verwendet werden können, um bestehende Daten mit Informationen anzureichern.

Big Data visualisieren

Ebenso behandelt ein ganzes Kapitel die Visualisierung von Big Data mithilfe von D3.js, eine JavaScript-Bibliothek, die neuartige und für Big Data prädestinierte Diagramme mit sich bringt.

Feedback

Falls Sie Fragen oder Anregungen zum Buch haben, freue ich mich natürlich, wenn Sie sich bei mir melden – Ebenso natürlich auch bei Kritik! Alle Fehler, die während des Lesens gefunden wurden, werden im folgenden Abschnitt aufgeführt.

Errata

Seite 54 (Praxistipp): Das Build Goal muss hier assembly:single heißen, nicht assembly:singe.

Seite 64 (Listing 3.34): Der Aufruf des Jobs muss wie folgt lauten:

bin/hadoop jar 02_MapReduceStudentData.jar de.jofre.grades.GradesDriver file:/usr/local/hadoop/input file:/usr/local/hadoop/output

Da im Maven-Build nicht angegeben wird, dass eine Manifest-Datei erstellt werden soll, die dann auf die Main-Klasse des Jobs verweist, müssen wir diese Klasse beim Aufruf des JARs angeben. Im Buch wurde davon ausgegangen, dass das Maven-Assembly-Plugin verwendet wird. Diesen Schritt habe ich allerdings als Optional gekennzeichnet.

Seite 76 (Liste am Ende der Seite): Auf dem Master läuft kein NodeManager, sondern ein NameNode. Korrekt ist es in der Grafik auf Seite 69 dargestellt.

27 thoughts on “Big Data in der Praxis”

  1. Hallo, das Buch ist für den Einstieg sehr gut geeignet, beim ausführen eines Jobs
    (Seite 66) kommen bei mir auch einige Fehlermeldungen.
    Enhält die GradesDriver.java absichtlich von dir eingebaute Fehler?
    Grüße

  2. Hallo, das Buch ist sehr gut.
    ich brauche Ihre Hilfe (ich habe keine Erfahrung in JAVA)
    ich habe ein Problem beim Ausfuehren :
    “bin/hadoop jar 02_MapReduceStudentData.jar …..” auf unbutu seite (ich habe alle Installationen 1:1 wie im Buch beschrieben durchgefuehrt) leider beim Aufruf “bin/hadoop ……” bekomme ich eine Fehlermeldung
    “exception in thread main java.lang.classnotfoundexception: file:.usr.local.hadoop.input
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) …..

    Gruesse

    1. Hi elarow,
      es ist immer schwer aus der Ferne eine qualifizierte Aussage über den genauen Fehlerfall zu treffen. Eine Classnotfoundexception wie du sie erhältst weist jedoch darauf hin, dass eine Java-Klasse, die du verwendest, nicht gefunden wird. Im Stack-Trace unter der Fehlermedung siehst du dann am Ende hinter dem Doppelpunkt die Zeile im Quellcode der jeweiligen Klasse, in der der Fehler auftritt. Schau da mal nach, in welcher Klasse das in deiner eigenen Implementierung passiert. Häufig gibt das Aufschluss, über die Fehlerursache.

  3. Hallo, schliesse mich der Aussagen von “elarov” an, genau den selben Fehler. Habe die ganze Installation zwei mal gemach mit dem selben Ergebnis. Könnte es an der JAVA-Version liegen?
    Hier noch die genaue Fehlerbeschreibung:
    Exception in thread “main” Java.lang.ClassNotFoundException: file: .usr.local.hadoop.input
    at java.netURLClassLoader$1.run(URLClass.Loader.java:366)
    at java.netURLClassLoader$1.run(URLClass.Loader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at Java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at Java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at Java.lang.ClassforName0(Native Method)
    at Java.lang.ClassforName(Class.java:274)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
    Besten Dank für Ihre Hilfe.

    1. Hi flavio,
      ich erhalte genau die gleiche Fehlermeldung und weiß leider auch nicht weiter 🙁
      Meine Vermutung ist dass die Klassenverweise im Source-Code nicht stimmen.
      Grüße,
      Florian

      1. Hi ulmarf, flavio und elarow: Bitte versucht mal folgenden Aufruf:

        bin/hadoop jar 02_MapReduceStudentData.jar de.jofre.grades.GradesDriver file:/usr/local/hadoop/input
        file:/usr/local/hadoop/output

        Wie ihr seht, gebe ich explizit die Main-Klasse an, die bei euch nicht gefunden wird. Das liegt daran, dass ich das Beispiel über das Maven-Assembly-Plugin packetiert habe (Dieses ist in Listing 3.29 zu sehen), das ich allerdings als Optional betitelt habe. Ihr habt also vollkommen recht, dass das im Buch nicht korrekt erklärt ist. Wäre schön, wenn ihr mal kurz testen könntet, ob der Job so läuft, dann würde ich das in die Errata-Liste aufnehmen.

        1. Hallo! ich hatte den selben Fehler und mit dem Verweis auf die main Methode führt er die jar aus, aber der map reduce job failed trotzdem. Hast du eine Ahnung? Fehlermeldung:

          19/03/18 16:04:47 INFO mapreduce.Job: Running job: job_1552950215520_0001
          19/03/18 16:04:51 INFO mapreduce.Job: Job job_1552950215520_0001 running in uber mode : false
          19/03/18 16:04:51 INFO mapreduce.Job: map 0% reduce 0%
          19/03/18 16:04:51 INFO mapreduce.Job: Job job_1552950215520_0001 failed with state FAILED due to: Application application_1552950215520_0001 failed 2 times due to AM Container for appattempt_1552950215520_0001_000002 exited with exitCode: 127 due to: Exception from container-launch:
          org.apache.hadoop.util.Shell$ExitCodeException:
          at org.apache.hadoop.util.Shell.runCommand(Shell.java:464)
          at org.apache.hadoop.util.Shell.run(Shell.java:379)
          at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)
          at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
          at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283)
          at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)
          at java.util.concurrent.FutureTask.run(FutureTask.java:262)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
          at java.lang.Thread.run(Thread.java:745)

  4. Hallo Jonas!

    Ich habe zum Lernen dein Beispiel aus dem Buch übernommen. Auf Seite 65/66 hänge ich nun fest und habe festgestellt, dass im GradesMapper die values leer sind, wodurch bei mir die Fehler verursacht werden. Die Inputfile ist jedoch nicht leer 🙂
    Woran könnte es liegen?

    Gruß Micha

    1. Hallo und danke für deine schnelle PM!

      Ursache gefunden: Key – Value vertauscht. Ist mir erst bewusst geworden, als ich die Daten auf der CD betrachtet hatte.
      PS: Deren Inhalte sind verschieden zu den Buch Listings.

      Schöne Weihnachten

  5. Hallo,

    das Buch ist sehr gut für den Einstieg in Hadoop geeignet. Insbesondere für Entwickler. Folgende Punkte sind mir in Kapitel 3 aufgefallen:

    Listing 3.72 (Seite 107): Das Listing wird leider nur in Auszügen abgedruckt. Mit den dargestellten Angaben hat es bei mir nicht funktioniert. Hierzu folgende Hinweise:
    1. job3 scheint ein tippfehler zu sein, hier muss es wohl job1 heissen.
    2. Der Aufruf jc.run() hat bei mir nicht funtioniert. Das hat erst funktioniert, nachdem ich den Job als eigenen Thread gestartet habe:
    Thread t = new Thread(jc);
    thread.start();

    Listing 3.84 (Seite 124): Beim Starten des Jobs fehlt das jar-Command. Richtig wäre bin/hadoop jar 06_InputOutputFormat.jar …

    Listing 3.100 (Seite 144): Die Aussage, dass der Wert von containersRequested um 1 wj. der Java-for-Schleifen reduziert werden muss ist meines Erachtens falsch. In den for-Schleifen lautet die Ende Bedingung kleiner als ContainerRequested und damit passt das. Die Reduktion um 1 führt dazu, dass mit einem Container weniger gearbeitet wird.

    Listing 3.107 und Listing 3.108 (Seite 150ff): Im Listing 3.107 wird der Aufruf der YARN-Anwendung mit 2 Container gemacht. Anschließend wird im Listing 3.108 auf das Ergebnis des 3. Containers verwiesen. Das passt nicht zusammen.

    1. Hallo Andreas,
      danke für das ausführliche Feedback. Ich gehe deine Punkte mal einzeln durch:

      1. “job3” sollte tatsächlich “job1” heißen. Das Ausführen als Thread war bei mir allerdings nicht notwendig, ich werde das, sobald ich wieder an meinem PC bin, mal mit der aktuellen Hadoop-Version verifizieren.

      2. Stimmt, hier fehlt das “jar” im Kommando.

      3. Da hast du Recht, das ist vielleicht ein wenig missverständlich formuliert. Es ist natürlich der der Schleife in ihrer Natur geschuldet, dass ich den Container-Zähler um 1 reduziere, sondern meiner Zählweise in den Schleifen.

      4. Hier muss ich noch mal verifizieren, wie die Benennung der Container zustande kam. Eine erste Vermutung ist, dass ich die Tests mit mehr als 2 Container gemacht hatte und die 3 hier fälschlicherweise stehen geblieben ist.

      Ich werde deine Funde entsprechend in die Errataliste aufnehmen.

  6. Hi Jonas,

    Danke für das wirklich gute Buch!

    Im Kapitel über NLP zeigst du eine Grafik unter 8.8 mit dem Verweis auf https://voxy.com/blog/index.php/2011/03/hardest-languages-infographic/

    In der Grafik im Buch ist die Sprache Deutsch in der Kategorie “Medium” angesiedelt. Das entspricht nicht den Informationen auf: https://voxy.com/blog/index.php/2011/03/hardest-languages-infographic/
    in den genannten Zitat wird auf:
    http://en.wikibooks.org/wiki/Wikibooks:Language_Learning_Difficulty_for_English_Speakers
    verwiesen, wo “German” mit 30 Wochen irgendwo zwischen easy und medium ist, im Range: 23-24(easy) und 44(medium) sind 30 ja noch näher bei easy.

    Ich würde jetzt nicht sagen, dass die Information komplett falsch ist 🙂 Aber vermutlich auch nicht ganz korrekt ?

    Viele Grüsse
    Marco

    1. Hi Marco,
      danke für’s aufmerksame Lesen! Du hast natürlich recht, wenn man nach der Information von Wikipedia geht, dann wäre Deutsch zu den leicht zu erlernenden Sprachen zu zählen.

  7. Hallo Jonas,

    ich habe das Buch als eBook bei Google gekauft leider musste ich feststellen das man keinen Zugriff auf das Material von der DVD hat. Gibt es eine Download Möglichkeit?

    Viele Grüße
    Thorsten

      1. Hallo Hans, hallo Thorsten,
        leider habe ich keine Ahnung wie Google das Buch vertreibt … ich würde direkt mal beim Hanserverlag anfragen, die müssten die Vertriebswege kennen. Sorry, dass ich euch da nicht weiterhelfen kann.

  8. Hallo Jonas, das Buch ist sehr informativ,
    bin gerade am lesen und ausprobieren.
    Ich möchte als erstes einen Single-Node-Cluster (unter SLES11 SP4) aufsetzen.
    Dafür kopiere ich mir direkt die langen Befehle aus dem PDF in die Linux-Bash.
    Gerade bei den umfassenden Befehlen bekomme ich nach dem kopieren nur Datenmüll (z.B. Umgebungsvariablen setzen).
    Gibt es einen Trick auch diese Texte gut kopiert in die Bash zu bekommen!
    Habe mit OSX, Linux und Win10 schon alles ausprobiert!
    Muss ich dafür eine bestimmte Schriftart installieren?
    Danke!
    Viele Grüße
    Tino Brandt

  9. Hi!
    Ich habe Probleme mit der dem Projekt “03_MRJobStarter”.
    Beim Run auf dem Server bekomme ich in der Konsole immer die Fehlermeldung “2015-09-09T08:13:42.378+0200|Warnung: Unable to load class org.apache.hadoop.hdfs.web.resources.UserProvider, reason: java.lang.NoClassDefFoundError: com/sun/jersey/server/impl/inject/AbstractHttpContextInjectable
    2015-09-09T08:13:42.425+0200|Information: Loading application [03_MRJobStarter] at [/03_g_MRJobStarter]
    2015-09-09T08:13:42.441+0200|Information: 03_MRJobStarter was successfully deployed in 1.469 milliseconds.”

    und leider keine Website wie erwünscht.
    Hast du einen Tip?

    1. Hi Thorsten, das sieht sehr danach aus, als würde er die Libs deines Application Servers nicht finden. Welchen verwendest du denn und hast du diesen in deinem Projekt in Eclipse korrekt angegeben?

  10. Hallo Jonas,

    Auf der jofre.de Einstiegsseite nimmst du Bezug zu Version 2.7.1. Ich verwende auch diese Version zum Studium Deines Buches (2.2.0 konnte ich nicht mehr downloaden).

    Habe leider ein Problem mit Kap.11.2 Hadoop unter Windows 7 zu kompilieren (hängt wohl mit den .Net 4.x Versionen zusammen). Schon verschiedenes probiert, Build-Prozess läuft einfach nicht durch.

    Habe die 2.2.0 winutil.exe von der CD benutzt um Kap 3.11 Jobs via Hadoop API zu bauen. Gibt aber Error Stacktraces im Glassfish.

    Frage: Gibt es eine Möglichkeit, dass Sie eine Windows7 kompilierte Version von 2.7.1 zur Verfügung stellen? Damit wäre eine Fehlereingrenzung für 3.11 und 3.12 einfacher.

    Viele Grüße Volker

  11. Hallo Jonas,
    ich habe wieder etwas mehr Zeit und teste gerade den Datenimport von MySQL in hbase über sqoop.
    Beim ausführen des Befehls:
    /sqoop import –connect jdbc:mysql://192.168.55.50:3306/company –table people –username sysadmin -P –hbase-table people_import –column-family peoplecf –hbase-create-table
    bekomme ich eine Fehlermeldung. Diese ändert sich auch nicht, wenn ich eine aktuelle Version von sqoop benutze oder die mysql***.jar austausche. Ich muss dazu sagen, das ich eine MariaDB 10.0x benutze!

    Fehlermeldung:
    Exception in thread “main” java.lang.NoSuchMethodError: org.apache.hadoop.http.HttpConfig.getSchemePrefix()Ljava/lang/String;
    at org.apache.hadoop.mapred.ClientServiceDelegate.getJobStatus(ClientServiceDelegate.java:428)

    Was kann das sein?

    Danke!

    Viele Grüße
    Tino Brandt

    1. Hi Tino, welche Hadoop- und Sqoop-Versionen verwendest du denn? Das klingt für mich eher nach einer Inkompatibilität zwischen den beiden Komponenten als nach einem Problem mit MariaDB.

  12. Hallo Jonas,
    der Befehl, aus Listing 3.34 (bin/hadoop jar 02_MapReduceStudentData.jar de.jofre.grades.GradesDriver file:/usr/local/hadoop/input file:/usr/local/hadoop/output
    ), zum Starten eines Map-Reduce-Jobs über Kommandozeile
    scheitert mit folgender Fehlermeldung:

    18/05/18 16:02:36 INFO mapred.MapTask: Starting flush of map output
    18/05/18 16:02:36 INFO mapred.LocalJobRunner: Map task executor complete.
    18/05/18 16:02:36 WARN mapred.LocalJobRunner: job_local238309128_0001
    java.lang.Exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 13
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403)
    Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 13
    at java.lang.String.substring(String.java:1907)
    at de.jofre.grades.GradesMapper.map(GradesMapper.java:18)
    at de.jofre.grades.GradesMapper.map(GradesMapper.java:10)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:235)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:473)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
    at java.lang.Thread.run(Thread.java:748)
    18/05/18 16:02:37 INFO mapreduce.Job: Job job_local238309128_0001 failed with state FAILED due to: NA
    18/05/18 16:02:37 INFO mapreduce.Job: Counters: 0
    May 18, 2018 4:02:37 PM de.jofre.grades.GradesDriver run
    INFO: Fertig

    So sieht die Klasse GradesMapper bei mir:
    public class GradesMapper extends Mapper {

    private IntWritable year_int = null;
    private IntWritable grade_int = null;

    public void map( Text key, Text value, Context context) throws IOException, InterruptedException {
    //Auslesen des Jahres und der Note aus einem String wie “285397 23.08.2013 19”
    System.out.println( “VALUE: ” + value);
    String year_str = value.toString().substring(10,13);
    String grade_str = value.toString().substring(14,15);

    year_int = new IntWritable(Integer.parseInt(year_str));
    grade_int = new IntWritable(Integer.parseInt(grade_str));

    context.write(year_int, grade_int);
    }

    }

  13. Hi, habe das Buch als Kindle Edition gekauft. Gibt es die CD bzw die Projekte irgendwo zum Download? Sonst macht die elektronische Variante für mich nicht viel Sinn. Ansonsten muss ich sagen, super Buch!!

  14. Hallo, auf Seite 40 im Buch, Listing 3.24 gibt es ein paar Druckfehler, die sich dann aber im Laufe des Buches wiederholen:
    Die Property wird als yarn.Node Manager.aux-services angegeben, in Wirklichkeit ist es yarn.nodemanager.aux-services
    Überhaupt wird immer statt “nodemanager” “Node Manager” geschrieben. Das funktioniert aber nicht.
    Könntet ihr eine Errata Seite irgendwo hochladen?

Leave a Reply

Your email address will not be published. Required fields are marked *