2016-07-27 23 views
5

Ich habe mehrere kleine parquet Dateien als Ausgabe von Hive Ql Job generiert, möchte ich die Ausgabedateien zu einzelnen Parkett-Datei zusammenführen?Wie mehrere Parkett-Dateien mit Linux-oder hdfs-Befehl zu einzelnen Parkett-Datei zusammenführen?

Was ist der beste Weg, es mit einigen hdfs or linux commands zu tun?

Wir haben die Textdateien mit dem Befehl cat zusammengeführt, aber funktioniert das auch für Parkett? Können wir es mit HiveQL selbst beim Schreiben von Ausgabedateien tun, wie wir es tun, repartition oder coalesc Methode in spark?

Antwort

0

verwenden Sie es auch HiveQL selbst mit zu tun, wenn Ihre Ausführungs-Engine mapreduce ist.

Sie eine Flagge für Ihre Abfrage festlegen können, die kleine Dateien am Ende Ihrer Arbeit fusionieren hive verursacht:

SET hive.merge.mapredfiles=true; 

oder

SET hive.merge.mapfiles=true; 

wenn Ihr Job ist es, eine Karte-only Job.

Dies führt dazu, dass der Hive-Job automatisch viele kleine Parkettdateien in weniger große Dateien zusammenführt. Sie können die Anzahl der Ausgabedateien mit der Einstellung hive.merge.size.per.task einstellen. Wenn Sie nur eine Datei haben möchten, stellen Sie sicher, dass Sie sie auf einen Wert setzen, der immer größer ist als die Größe Ihrer Ausgabe. Stellen Sie außerdem sicher, dass Sie hive.merge.smallfiles.avgsize entsprechend anpassen. Setzen Sie es auf einen sehr niedrigen Wert, wenn Sie sicherstellen möchten, dass die Hive immer Dateien zusammenführt. Sie können mehr über diese Einstellungen in Hive documentation lesen.