Groovy Baby – Datawarehousing mit Hive, Thrift und Groovy


Apaches Datawarehouse-System Hive lässt sich nicht nur über die Hive-Shell sondern auch remote über den Hiveserver abfragen. Dazu muss dieser mit geeigneten Rechten gestartet werden, ein lauffähiges Hadoop-System vorausgesetzt. Am besten ist es, man nutzt einen dedizierten Linux-Client als Hiveserver der sich dann mit der eigentlichen Hive-Installation verbindet. Im folgenden Beispiel setze ich die Installation von CDH4.1 voraus. Läuft erstmal der Hiverserver, ist die Hadoop-Distribution aber eher nebensächlich. Auf Port 10000 läst sich der Server starten mit

$ nohup hive --service hiveserver -p 10000 &

und sicher in den Hintergrund legen, wo er auf eingehende Nachrichten über das Thrift-Protokoll wartet. Auf dem Client muss Groovy lediglich die nötigen Hadoop und Hive-Bibliotheken
finden. Auf dem genutzten Ubuntu-System geschied dies am einfachsten über das hinzufügen der nötigen JAR-Pfade in der Datei

$ vi /etc/groovy/groovy-starter.conf

Folgende Zeilen müssen dazu hinzugefügt werden:

# Hadoop libraries
load /usr/lib/hadoop/lib/*.jar
load /usr/lib/hadoop-0.20-mapreduce/lib/*.jar
 
# hive libraries
load /usr/lib/hive/lib/*.jar

Danach ermöglich folgendes Groovy-Script die einfache Abfrage einer bestehenden Datenbank meine_datenbank und der Tabelle meine_tabelle mit:

1
2
3
4
5
6
7
8
9
10
11
12
import org.apache.hadoop.hive.service.*;
import org.apache.thrift.protocol.*;
import org.apache.thrift.transport.*;
 
transport = new TSocket("localhost",10000);
protocol = new TBinaryProtocol(transport);
client = new HiveClient(protocol);
transport.open();
client.execute("SELECT * FROM meine_datenbank.meine_tabelle LIMIT 10");
data = client.fetchAll();
println data.toString();
transport.close();

Nützlich ist bei eigenen Experimenten mit Thrift, Hive und Groovy ist auch die Groovy-Shell, welche interaktive Abfragen und Autovervollständigung ermöglicht.

Crunch hilft bei der MapReduce Implementierung

20121229-085440.jpg
Das neue Apache Incubator Projekt Crunch versucht die Implementierung von Java-basierten MapReduce Programmen zu vereinfachen.
Crunch implementiert dabei eine weitere Absteaktionsschicht auf Hadoops MapReduce-API um wiederkehrende Muster wie das Sortieren und Gruppieren von Elementen zu vereinfachen.
Dazu nutzt Crunch im Kern die beiden neuen Java-Typen PCollection und PTable. Auf beiden Java-Collections können foldende, einfache Operationen ausgeführt werden:

  1. parallelDo – ruft eine Benutzerdefinierte Methode mit einer PCollection auf und liefert eine PCollection zurück
  2. groupByKey – Sortiert und Gruppiert die Elemente einer PTable-Collection nach ihren Schlüsseln
  3. combineValues – Führt assoziative Operationen auf den Werten von PTable aus
  4. union – Behandelt zwei oder mehr PCollections als eine einzige PCollection

Crunch biete darüber hinaus weitere Operationen, welche auf diesen einfachen Operationen aufbauen. So lassen sich, mit deutlich weniger Code als die normale MapReduce-API von Hadoop bietet, auch komplexe Datenverarbeitungs-Pipelines implementieren.

Interessant ist auch der Scala-Wrapper Scrunch, welcher den einfachen Zugriff auf die Crunch-API von Scala aus ermöglicht.

Initiiert wurde Crunch von Cloudera.

Microsoft bringt eigene Hadoop Distribution HDinsight

20121105-063526.jpg

Anlässlich der Strata- und Hadoop World Konferenz präsentierte Microsoft die eigene Hadoop Distribution HDinsight, welche zusammen mit Hortonworks entstanden ist.

Die Produkteinführung kommt mit zahlreichen Ankündigungen.So ist neben einer Version für den Windows Server auch implementierungen für Microsofts Cloud Plattform Azur verfügbar.

HDinsight nutzt die quelloffene Hortonworks Hadoop Data Platform (HDP). Neben Anbindungen zu Excel und Power Pivot. Eine eindrucksvolle Demo findet sich auf Vimeo.

Darüber hinaus wurden JavaScript und .NET SDKs für die Entwicklung von Map Reduce Anwendung vorgestellt. Man darf gespannt sein, wohin Microsofts Hadoop Reise noch geht.

Mit der Schwarzfersenantilope auf Googles Spuren: Clouderas Impala

20121029-062335.jpg

Vielen Firmen gehen Tools wie Pig, Hive und HBase nicht weit genug. Statt große Datenmengen im Batchbetrieb zu verarbeiten geht der Trend ganz klar hin zu Lösungen für Ad-hoc-Abfragen in Echtzeit.

Eine solche Engine gibt es seit kurzem auch von einem der größten Hadoop-Distributionsanbieter Cloudera. Mit Impala (Schwarzfersenantilope) präsentiert Cloudera eine Open Source Lösung auf Basis von Hadoop und HBase.

Die Architektur von Clouderas Impala geht zurück auf Arbeiten von Marcel Kornacker bei Google für das Projekt F1. Die F1 Datenbank löst in Googles Ad-Infrastruktur die MySQL-basierte Lösung ab.

Ebenso wie F1 versucht Clouderas Impala das beste beider Welten zu vereinen. Basierend auf bewährten Technlologien für die Fehlertoleranz, Skalierbarkeit und transparente Datenverteilung wie Hadoop und HBase sie bieten, setzt Impana eine Query-Engine für die Echtzeitabfrage mit Hilfe einer SQL-artigen Abfragesprache.

Impala könnte dabei Lösungen wie Hive, welche schon seit einigen Jahren existieren und SQL-artige Abfragen in MapReduce-Task umwandeln, ablösen.

Auf dem Rücken des Datenmammuts

Herzlich Willkommen auf meinem neuen Blog Das Datenmammut. Auf diesem Blog möchte ich wöchentlich und in regelmäßigen Abständen über verschiedene Themen aus dem Bereich Big Data im Allgemeinen und Hadoop im Speziellen berichten. Dazu gehören:

  • Nationale und Internationale Nachrichten rund um Themen zu Big Data und Hadoop
  • Rezensionen von Büchern zum Thema Datenanalyse, Maschinelles Lernen und Informationsverarbeitung
  • Vorstellung neuer Software und Tools
  • Praxisbeispiele zur Verarbeitung großer Datenmengen
  • Tips und Tricks zu MapReduce und der Konfiguration verschiedener Dienste des Hadoop-Ökosystems

Ich freue mich über jede Art von Anregungen, Kommentaren, Kritiken und Hinweisen.

Ramon Wartala