我知道在纱簇上运行spark应用程序时有两种模式。
在纱线集群模式中,驱动程序在应用程序主控器(yarn集群内)中运行。在yarn客户端模式中,它在提交作业的客户端节点中运行
我想知道使用一种模式比使用另一种模式有什么优势?在什么情况下我们应该使用哪种模式。
有两种部署模式可用于在YARN上启动Spark应用程序。
Yarn集群:Spark驱动程序作为Yarn应用程序主机在Hadoop集群中运行,并在Yarn容器中启动Spark执行器。这允许Spark应用程序在Hadoop集群中运行,并与仅用于作业提交的工作台完全解耦。一个例子:
[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
请注意,在上面的示例中,–queue选项用于指定将应用程序提交到的Hadoop队列。
Yarn客户端:Spark驱动程序在工作台上运行,ApplicationMaster的角色减少。它只向YARN请求资源,以确保Spark工作程序位于YARN容器内的Hadoop集群中。这提供了一个具有分布式操作的交互式环境。下面是一个在这种模式下调用Spark的例子,同时确保它使用HadoopLZO编解码器:
[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
因此,当您的工作需要交互式环境时,您应该使用客户端模式。yarn客户端模式接受来自sparkshell的命令。
当您想将作业与Spark工作台解耦时,请使用Yarn集群模式。