Es gibt zwei Bereitstellungsmodi, die zum Starten von Spark-Anwendungen auf YARN verwendet werden können.
Yarn-Cluster: Der Spark-Treiber wird innerhalb des Hadoop-Clusters als YARN Application Master ausgeführt und aktiviert Spark-Executoren in YARN-Containern. Dadurch können Spark-Anwendungen innerhalb des Hadoop-Clusters ausgeführt und vollständig von der Workbench abgekoppelt werden, die nur für die Jobübergabe verwendet wird. Ein Beispiel:
[terminal~]:cd $SPARK_HOME
[terminal~]:./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn
–deploy-mode cluster --num-executors 3 --driver-memory 1g --executor-memory
2g --executor-cores 1 --queue thequeue $SPARK_HOME/examples/target/spark-examples_*-1.2.1.jar
Beachten Sie, dass im obigen Beispiel wird die -Queue Option verwendet, um die Hadoop-Warteschlange angeben, an der der Antrag gestellt wird.
Garn-Client: Der Spark-Treiber läuft auf der Workbench selbst, wobei der Application Master in einer reduzierten Rolle arbeitet. Es fordert nur Ressourcen von YARN an, um sicherzustellen, dass sich die Spark-Mitarbeiter im Hadoop-Cluster in YARN-Containern befinden. Dies bietet eine interaktive Umgebung mit verteilten Operationen. Hier ist ein Beispiel von Spark in diesem Modus aufrufen, während es die Hadoop LZO-Codec nimmt zu gewährleisten:
[terminal~]:cd $SPARK_HOME
[terminal~]:bin/spark-shell --master yarn --deploy-mode client --queue research
--driver-memory 512M --driver-class-path /opt/hadoop/share/hadoop/mapreduce/lib/hadoop-lzo-0.4.18-201409171947.jar
Also, wenn Sie für Ihre Arbeit interaktive Umgebung möchten, sollten Sie Client-Modus verwenden. Der Garn-Client-Modus akzeptiert Befehle von der Funkenschale.
Wenn Sie Ihren Job von Spark Workbench entkoppeln möchten, verwenden Sie den Yarn-Cluster-Modus.
Ich denke, ich kann keine bessere Antwort als [dies] (https://www.quora.com/When-should-apache-spark-be-run-in-yarn-cluster-mode-vs-yarn -client-mode-A-Anwendungsfall-Beispiel-für-beide-Ansätze-wäre-mehr-hilfreich. Einzige Sache, die ich hinzufügen kann, ist es bequemer, Garn-Cluster-Modus zu verwenden, wenn Sie Ihren Job mit Oozie ausführen, da Sie einfach Ihre App-Jar in HDFS und geben Sie Jar-Pfad als Parameter Oozie Spark Action. Auf der anderen Seite ist es einfacher, Protokolle in der Konsole zu überprüfen, wenn Sie Ihre App im Garn-Client-Modus ausführen –