当 运行 spark on yarn 时,我们应该使用哪种模式?

which mode we should use when running spark on yarn?

我知道有两种模式 运行 spark applications on yarn cluster。

yarn-cluster 模式下,驱动程序在Application Master 中运行(在YARN 集群内)。在yarn-client模式下,运行在提交作业的client节点

我想知道使用一种模式相对于另一种模式有什么优势?什么情况下应该使用哪种模式

有两种部署模式可用于在 YARN 上启动 Spark 应用程序。

Yarn-cluster: Hadoop 集群中的 Spark 驱动程序 运行 作为 YARN Application Master 并在 YARN 容器中启动 Spark 执行器。这允许 Spark 应用程序在 Hadoop 集群内 运行 并与仅用于作业提交的 workbench 完全解耦。一个例子:

[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-client: Spark 驱动程序 运行 在 workbench 本身上,Application Master 以简化的角色运行。它只从 YARN 请求资源以确保 Spark worker 驻留在 YARN 容器内的 Hadoop 集群中。这提供了一个具有分布式操作的交互式环境。下面是在这种模式下调用 Spark 的示例,同时确保它选择 Hadoop LZO 编解码器:

[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-client 模式接受来自 spark-shell.

的命令

当您想将作业与 Spark 分离时 workbench,请使用 Yarn 集群模式。