2017-03-17 3 views
0

Ich habe Tabelle in MySQL Ich möchte Daten mit sqoop importieren. Ich importierte die Daten und speicherte sie in HDFS als file. Jetzt möchte ich ein inkrementelles Update auf dieser Datei in hdfs ausführen.Inkrementelle Dateianhänge

Angenommen, ich habe 100 Zeilen in MYSQL-Tabelle. Die Datei in HDFS enthält Daten im Wert von ersten 50 Zeilen. Wie kann ich diese Datei inkrementell aktualisieren?

I am talking about files not Hive tables.

Ich möchte inkrementelle Daten als separate Datei nicht zusammengeführte Datei. Zum Beispiel enthält die erste Teildatei 50 Datensätze, dann brauche ich eine Teildatei, die die nächsten 50 Datensätze enthält. Ich meine, können wir inkrementelle Updates für Dateien durchführen?

+0

nächsten 50 Datensätze sind neue Datensätze oder es kann auch aktualisierte Datensätze werden? –

+0

@dev ツ Es kann beides sein –

+1

@dev ツ Ich denke, ich habe verwirrt Sie bitte einen Blick auf die bearbeitete Frage –

Antwort

0

In diesem Fall können Sie die HDFS-Datei nicht aktualisieren.

Aber das ist ein häufiger Anwendungsfall. sqoop-merge Werkzeug kann dies lösen. Sie müssen squoop inkrementellen Import durchführen und Ausgabe in verschiedenen hdfs-Dateien speichern.

Per documentation,

Das Merge-Tool ermöglicht es Ihnen, zwei Datensätze zu kombinieren, wo in einer Datensatz Einträge Einträge eines älteren Datensatz überschrieben werden sollen. Ein inkrementeller Importlauf im Modus "Zuletzt geändert" generiert beispielsweise mehrere Datensätze in HDFS, in denen nacheinander neuere Daten in jedem Datensatz angezeigt werden. Das Zusammenführungstool "macht" zwei Datensätze zu einem zusammen und verwendet dabei die neuesten verfügbaren Datensätze für jeden Primärschlüssel.

Beispielbefehl:

sqoop merge --new-data newer --onto older --target-dir merged \ 
--jar-file datatypes.jar --class-name Foo --merge-key id