2016-11-28 9 views
0

Das Szenario ist Ich muss eine Datei (Input) verarbeiten und für jeden Datensatz muss ich überprüfen, ob bestimmte Felder in der Eingabedatei mit den Feldern in einem Hadoop-Cluster übereinstimmen.Verbinden von HIVE in MRJob

Wir denken daran, mit MRJob die Eingabedatei zu verarbeiten und mit HIVE Daten aus dem Hadoop-Cluster zu holen. Ich würde gerne wissen, ob es mir möglich ist, HIVE in einem MRJob-Modul zu verbinden. Wenn ja, wie?

Wenn nicht, was wäre der ideale Ansatz, um meine Anforderung zu erfüllen.

Ich bin neu in Hadoop, MRJob und Hive.

Bitte geben Sie einen Vorschlag.

Antwort

0

"Übereinstimmungen mit den in einem Hadoop-Cluster gespeicherten Feldern." -> Sie meinen, dass Sie suchen müssen, wenn die Felder auch in dieser Datei vorhanden sind?

Wie viele Dateien müssen insgesamt gescannt werden?

Eine Lösung besteht darin, jedes einzelne Element in einer HBase-Tabelle zu laden und für jeden Datensatz in der Eingabedatei den Datensatz aus der Tabelle "abzurufen". Wenn das GET erfolgreich ist, existiert der Datensatz an anderer Stelle in HDFS, oder auch nicht. Sie würden für jeden HBase-Datensatz eine eindeutige Kennung benötigen, und in Ihrer Eingabedatei sollte auch derselbe Bezeichner vorhanden sein.

Sie können auch eine Verbindung zu Hive herstellen, aber das Schema muss starr sein, damit alle Ihre HDFS-Dateien in eine einzelne Hive-Tabelle geladen werden können. HBase kümmert sich nicht wirklich um Spalten (nur ColumnFamilies benötigt). Ein weiterer Nachteil von MapReduce und Hive ist, dass die Geschwindigkeit im Vergleich zu HBase (fast in Echtzeit) niedrig ist.

Hoffe, das hilft.

+0

Ja. Für das Beispiel Meine ist Eingabedatei so etwas wie dieses Eingabedatei: Namen, add1, add2, Postleitzahl, Mark, 31 Maybush, XXX, WF1 5xy Ich muss prüfen, ob der Wert des Feldes 'add1' Das ist "31 Maybush" für Name "Mark" in der Eingabedatei stimmt mit den Daten im Cluster für den gleichen Namen überein. – user1703319

+0

Haben alle Dateien das exakt gleiche Schema? Wenn ja, können Sie eine Hive-Tabelle erstellen und alle Hunderte/Tausende von Dateien, die Sie haben, in die neue Hive-Tabelle laden. Dann können Sie eine Verbindung herstellen, um eine Hive-Abfrage von MapReduce auszuführen. Ihre Hive-Abfrage wird etwa so aussehen: SELECT * FROM big_hive_table WHERE add1 = '31 Maybush 'AND name =' Mark '; Natürlich müssen Sie 31 Maybush und Mark dynamisch ändern, während jede Eingabedatei gelesen wird. – AkashNegi

+0

Das Problem mit dem obigen Ansatz ist, dass es für jede Abfrage in Hive einen MR-Job gibt, so dass ein MR-Job für jede Zeile in der Eingabedatei ausgeführt wird, da wir jede Zeile vergleichen. Wenn Sie 2000 Zeilen haben, dann 2000 MR-Jobs für Vergleiche. – AkashNegi

Verwandte Themen