2016-04-02 17 views
1

Ich habe einen Anwendungsfall, wo ich 3072 GB-Dateien habe, über die ich eine HIVE-Tabelle erstellen. Jetzt, wenn ich eine Abfrage über diese Tabelle ausführen, erstellt die Abfrage 3072 Mapper und dauert etwa 44 Minuten. Früher waren dieselben Daten (d. H. Gleiche Datengröße) in 384 Dateien vorhanden. Die gleichen Abfragen haben nur ungefähr 9 Minuten gedauert.Reduzieren Sie die Anzahl der Hadoop-Mapper für eine große Anzahl von GZ-Dateien

Ich suchte im Internet, wo ich fand, dass die Anzahl der Mapper durch die Anzahl der "Splits" der i/p-Daten entschieden wird. Daher würde das Setzen der Parameter mapreduce.input.fileinputformat.split.minsize und mapreduce.input.fileinputformat.split.maxsize auf einen hohen Wert wie 64 MB dazu führen, dass jeder Mapper Daten im Wert von 64 MB aufnimmt, selbst wenn dies die Verarbeitung mehrerer Dateien durch denselben Mapper erfordert.

Aber diese Lösung funktioniert nicht für meinen Fall, da GZ-Dateien von "nicht-Split-Format" sind. Daher können sie nicht über Mapper aufgeteilt oder verknüpft werden, um von einem einzelnen Mapper verarbeitet zu werden.

Hat jemand dieses Problem auch konfrontiert?

Es kann verschiedene Lösungen geben, wie z. B. das Entpacken der gz-Dateien und die Verwendung der obigen Parameter, um eine geringere Anzahl von Mappern zu haben, oder die Verwendung höherer ec2-Instanzen, um die Verarbeitungszeit zu reduzieren. Aber gibt es eine inhärente Lösung in Hadoop/Hive/EMR, um dies anzugehen?

Vielen Dank im Voraus für jede Hilfe!

+0

Sie könnten versuchen, Apache Schwein zu verwenden, ermöglicht es, kleine Dateien zu einem einzigen Split zu kombinieren, siehe http://pig.apache.org/docs/r0.11.1/perf.html#combine-files. Mit HIVE-Sache müssten Sie in eine andere Tabelle mit speziellen Hive-Einstellungen einfügen, siehe http://inquidia.com/news-and-info/working-small-files-hadoop-part-3 – alexeipab

+0

Wie groß sind die Dateien, die Sie benötigen beziehen Sie sich durchschnittlich? Wäre es möglich, einige dieser Dateien zusammenzuführen? Weniger Dateien zum Quellen sollten weniger Mapper produzieren. – Jared

+0

@alexeipab Ich habe Schweine nicht untersucht, aber die Lösungen in der Verknüpfung, die Sie angegeben haben, sind nicht relevant, da die Dateien im GZ-Format in meinem Szenario sind. –

Antwort

1

Ich stieß auf das gleiche Problem. Ich denke, das wird Ihnen helfen: http://www.ibm.com/developerworks/library/bd-hadoopcombine/

Die Hauptidee besteht darin, mit CombineInputSplit und CombineRecordReader CombineInputFormat zu erstellen. Da Ihre Dateien .gz sind, werden sie entpackt und dann von RecordReader in Datensätze gelesen.

+0

Könnten Sie bitte auf diese Antwort eingehen? http://stackoverflow.com/help/how-to-answer –

Verwandte Themen