2017-03-01 2 views
0

Ich habe begonnen, Hadoop Stack für eines meiner Projekte zu lernen (Neuling im Hadoop-Stack). Ich versuche herauszufinden, welcher Ansatz für ETL-Prozesse am besten geeignet ist, um Daten in HIVE zu übertragen. Ich habe eine funktionierende Lösung, aber ich denke, es ist nicht optimal und es gibt bessere Möglichkeiten.Hadoop Daten importieren - richtiger ETL-Ansatz

Mein Fall: Ich habe eine Rohdaten in Binärdateien vom System generiert. Bevor ich sie auf HDFS/HIVE setze, muss ich sie mit dem Unix-Konsolenprogramm (ziemlich komplex) für Textzeilen mit Daten analysieren und dann in die HIVE-Tabelle legen.

Meine aktuelle Lösung:

  1. -System eine Nachricht an Kafka hinzufügen, dass es eine neue Binär-Datei für die Verarbeitung wartet.

  2. Ich habe ein Python-Skript auf hadoop Master-Knoten (zumindest vorerst):

    A) recieveing ​​Kafka Nachrichten

    B) das Herunterladen der Datei.

    C) Ausführung des Konsolenprogramm

    D) Speicher von Textausgabe CSV

    E) Pushing CSV

    F) Erstellen von temporärer Tabelle in HIVE aus CSV-Datei

    auf HDFS-Datei G) EINFÜGEN von Daten aus der temporären TABLE in eine separate Tabelle auf der ORC-Engine

    H) Temporäre Tabelle löschen

Meine Fragen:

  1. Ist diese Strömung optimal? Vielleicht gibt es etwas, das einfacher sein könnte?

  2. Es ist möglich, dieses Python-Skript (oder eine andere bessere Technologie?) Automatisch auf jedem Hadoop-Knoten zu planen/bereitzustellen/auszuführen?

  3. Gibt es Hinweise auf Werkzeuge/Optionen, um den gesamten Prozess einfach zu warten, zu planen und effizient zu machen?

Antwort

0

Ich nehme Ihre Nummer 2 -> D ein konstantes Layout für csv hat. In diesem Fall Fall, können Sie die Punkte F und H kombinieren, anstatt zu erstellen und fallende Tabelle jedes Mal, Sie können eine Vorlage Temp-Tabelle erstellen und Daten jedes Mal überschreiben.

Für ZB:

create external table template 
(
---- Your csv schema. 
) 

Weiter können Sie folgenden Einsatztyp versuchen:

LOAD DATA LOCAL INPATH '%s' OVERWRITE INTO TABLE template; 

Dies wird einige Zeit in Ihrer Verarbeitung zu reduzieren.

Ich bin nicht sicher über Java, aber ich habe viel Python verwendet und diese ähnlichen Anforderungen bei meiner Arbeit implementiert. Ich hatte nie Probleme mit Python aufgrund seiner Vielfalt und verschiedenen verfügbaren Module.

Wenn Sie dies in UNIX-Box implementieren, können Sie entweder Cron oder Oozie verwenden, um die gesamte Automatisierung zu planen.

+0

Thx für Hinweise. Tabelle wird nun erstellt von: 'AUSSEN CREATE TABLE IF NOT Vorlage VORHANDEN ( ---- CVS Schema ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '' GESPEICHERT als Textdatei location' Wo Standortpfad zu HDFS ist CSV-Datei. Danach verwende ich: 'INSERT INTO TABELLE target_table SELECT * FROM Vorlage; DROP TABLE IF EXISTS Vorlage; ' – mcwolf