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.
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. –
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. –