2016-07-06 13 views
3

Erstellt eine einzelne HIVE-Abfrage, die an Yarn übergeben wird, mehrere Jobs (d. H. Mehrere YARN-Anwendungen)? Hier behandle ich Job und Bewerbung, um im YARN-Kontext gleich zu denken.Erzeugt einzelne Bienenstockanwendung (Job) mehrere Garnanwendungen?

Von was ich verstehe - Garn erstellt einen Application Master (AM) pro "Anwendung". Daher kann diese einzelne HIVE-Abfrage als eine "Anwendung" behandelt werden. Daher erstellt der Ressourcen-Manager einen Container auf einem Knoten und startet AM in diesem Container. Dieser Container wiederum kann mehrere "Aufgaben" (keine Anwendungen) erstellen, d. H. Mapper und Reducer innerhalb anderer Container, die für diesen AM reserviert sind (auf demselben oder einem anderen Knoten - dies ist hier unerheblich). Jetzt ist die Sammlung all dieser Anwendungs-Masters mit der Lösung dieser einzelnen HIVE-Abfrage beschäftigt, die an YARN übergeben wird. Tatsächlich sagen wir, dass AM pro Anwendung ist. Da wir nur eine HIVE-Abfrage eingereicht haben, gibt es aus Sicht von YARN nur eine Anwendung. Wenn ich den folgenden YARN-Befehl abfange, sollte er mir nur eine Anwendung zeigen: -

yarn application -list 

Ist dieses Verständnis korrekt? Oder wenn mehrere Mapper und Reducer für diese eine HIVE-Abfrage generiert werden, werden mehrere YARN-Anwendungen aufgerufen?

+0

Starten Sie das Hive-CLI, führen Sie eine Abfrage aus und beobachten Sie die Protokolle. Nachdem Hive den Ausführungsplan kompiliert hat, wird ein YARN-Job erstellt, und Sie sehen die einzige "Anwendungs-ID" Ihrer Abfrage, die in Sichtweite angezeigt wird. –

+1

Auf der anderen Seite, wenn Sie Hive-on - ** TEZ ** ausführen, dann ist es ein bisschen anders - TEZ hat eine "Keep Alive" -Funktion, die gleiche YARN AM für mehrere Abfragen, Anfordern oder Freigeben neue Container dynamisch. –

Antwort

5

Sie waren richtig am Anfang:

  • A GARN Anwendung von MapReduce erstellt wird ein Job genannt. Also Anwendung = Job. Richtig.
  • Es gibt einen AM pro Job. Richtig.

Von dort werden die Dinge, die Sie sagten, ein bisschen durcheinander gebracht. Eine Hive-Abfrage ist keine Anwendung. Eine Hive-Abfrage wird von Hive in verkettete MapReduce-Jobs übersetzt. Wenn Sie also eine komplizierte Hive-Abfrage ausführen, sendet Hive die erforderlichen MapReduce-Jobs (YARN-Anwendungen), die nacheinander ausgeführt werden, um das Endergebnis zu erhalten.

Zum Beispiel lassen Sie uns die folgende SQL-Abfrage übernehmen:

SELECT SUM(total) as sumtotal, city 
FROM donations 
GROUP BY city 
ORDER BY sumtotal; 

Wenn Sie diese manuell lösen mit MapReduce wollen, müssen Sie zwei Arbeitsplätze schaffen:

  • Job 1 - Aggregation: Map Eingabe in (Stadt, Summe) Paare und reduzieren den SUMME-Wert pro Stadt
  • Job 2 - Sortierung: Ordne das Ergebnis von Job 1 den inversen Paaren (gesamt, Stadt) zu und sortiere sie nach dem Zufallsprinzip/

Detaillierte Erklärung und Illustration zur Lösung dieses Problems mit MR-Jobs here.

Wenn Sie diese Abfrage in Hive laufen, sieht die Ausgabe wie folgt aus:

INFO : number of splits:3 
INFO : Submitting tokens for job: job_1454508485700_0039 
INFO : The url to track the job: http://ubuntu0:8088/proxy/application_1454508485700_0039/ 
INFO : Starting Job = job_1454508485700_0039, Tracking URL = http://ubuntu0:8088/proxy/application_1454508485700_0039/ 
INFO : Kill Command = /home/hduser/hadoop/bin/hadoop job -kill job_1454508485700_0039 
INFO : Hadoop job information for Stage-1: number of mappers: 3; number of reducers: 3 
INFO : 2016-02-10 22:21:15,773 Stage-1 map = 0%, reduce = 0% 
INFO : 2016-02-10 22:22:08,421 Stage-1 map = 11%, reduce = 0%, Cumulative CPU 99.2 sec 
INFO : 2016-02-10 22:22:17,019 Stage-1 map = 44%, reduce = 0%, Cumulative CPU 127.32 sec 
INFO : 2016-02-10 22:22:20,694 Stage-1 map = 67%, reduce = 0%, Cumulative CPU 134.32 sec 
INFO : 2016-02-10 22:22:21,906 Stage-1 map = 78%, reduce = 0%, Cumulative CPU 135.2 sec 
INFO : 2016-02-10 22:22:32,877 Stage-1 map = 89%, reduce = 0%, Cumulative CPU 147.49 sec 
INFO : 2016-02-10 22:22:35,379 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 149.85 sec 
INFO : 2016-02-10 22:22:39,108 Stage-1 map = 100%, reduce = 44%, Cumulative CPU 160.65 sec 
INFO : 2016-02-10 22:22:41,578 Stage-1 map = 100%, reduce = 56%, Cumulative CPU 170.0 sec 
INFO : 2016-02-10 22:22:42,792 Stage-1 map = 100%, reduce = 60%, Cumulative CPU 171.87 sec 
INFO : 2016-02-10 22:22:44,022 Stage-1 map = 100%, reduce = 89%, Cumulative CPU 183.23 sec 
INFO : 2016-02-10 22:22:46,540 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 183.23 sec 
INFO : Ended Job = job_1454508485700_0039 
INFO : number of splits:2 
INFO : Submitting tokens for job: job_1454508485700_0040 
INFO : The url to track the job: http://ubuntu0:8088/proxy/application_1454508485700_0040/ 
INFO : Starting Job = job_1454508485700_0040, Tracking URL = http://ubuntu0:8088/proxy/application_1454508485700_0040/ 
INFO : Kill Command = /home/hduser/hadoop/bin/hadoop job -kill job_1454508485700_0040 
INFO : Hadoop job information for Stage-2: number of mappers: 2; number of reducers: 1 
INFO : 2016-02-10 22:23:16,180 Stage-2 map = 0%, reduce = 0% 
INFO : 2016-02-10 22:23:46,453 Stage-2 map = 50%, reduce = 0%, Cumulative CPU 13.39 sec 
INFO : 2016-02-10 22:23:47,715 Stage-2 map = 67%, reduce = 0%, Cumulative CPU 14.73 sec 
INFO : 2016-02-10 22:23:48,945 Stage-2 map = 100%, reduce = 0%, Cumulative CPU 17.38 sec 
INFO : 2016-02-10 22:24:10,960 Stage-2 map = 100%, reduce = 71%, Cumulative CPU 25.33 sec 
INFO : 2016-02-10 22:24:13,383 Stage-2 map = 100%, reduce = 98%, Cumulative CPU 31.32 sec 
INFO : 2016-02-10 22:24:14,616 Stage-2 map = 100%, reduce = 100%, Cumulative CPU 32.61 sec 
INFO : MapReduce Total cumulative CPU time: 32 seconds 610 msec 
INFO : Ended Job = job_1454508485700_0040 
INFO : Moving data to: /user/hduser/donors/hive_output_part2 from hdfs://ubuntu0:9000/user/hive/warehouse/.hive-staging_hive_2016-02-10_22-20-50_281_4971139345555329337-4/-ext-10001 
INFO : Table default.hive_output_part2 stats: [numFiles=0, numRows=14966, totalSize=0, rawDataSize=321343] 
No rows affected (207.86 seconds) 

Sie können sehen, dass Hive erstellt 2 Jobs als auch, eine nach der anderen. Sie können sehen, dass "Job starten" zweimal protokolliert wird, sowie neue Job-URLs, die zweimal generiert werden.

Hive bezieht sich auf die Jobs als "Stages", aber das sind nur normale MapReduce-Jobs (d. H. Anwendungen).

Sie können Vergleiche und Benchmarks von Hive vs einige manuelle Jobs, die ich tat, here finden.Hive verwendete die gleiche Anzahl von Jobs und hat ungefähr die gleichen Ausführungszeiten wie meine handcodierten MR-Jobs. Im Grunde genommen sind es immer noch verkettete MapReduce-Jobs, die für Sie generiert werden, damit Sie keinen Code schreiben müssen.

Alles, was ich sagte, gilt nur für die Standard-Ausführungsengine MapReduce. Die Verwendung von Tez oder Spark als Ausführungsmodul ist eine andere Geschichte.

Verwandte Themen