使用 Spark On Yarn

这里我们使用 Spark on Yarn 方式,

就是将Spark应用程序跑在Yarn集群之上,通过Yarn资源调度将executor启动在container中,从而完成driver端分发给executor的各个任务。将Spark作业跑在Yarn上,首先需要启动Yarn集群,然后通过spark-shell或spark-submit的方式将作业提交到Yarn上运行

设置 Spark on Yarn 需要在 spark-env.sh 中设置

HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

On Yarn 有两种模式:

Yarn的俩种模式:一种为 client; 一种为 cluster. 可以通过- -deploy-mode 进行指定,也可以直接在 --master 后面使用 yarn-client和yarn-cluster进行指定

俩种模式的区别:在于driver端启动在本地(client), 还是在Yarn集群内部的AM中(cluster)

在这种模式下,我们无需启动 master 和 worker

可以通过 修改 spark-defaults.conf 将 jar 包放在 hdfs 上

spark.yarn.jars hdfs:///spark/jars/*

Spark On Yarn 的优势

每个 Spark executor 作为一个 YARN 容器 (container) 运行。Spark 可以使得多个 Tasks 在同一个容器 (container) 里面运行

  1. Spark 支持资源动态共享,运行于 Yarn 的框架都共享一个集中配置好的资源池
  2. 可以很方便的利用 Yarn 的资源调度特性来做分类、隔离以及优先级控制负载,拥有更灵活的调度策略
  3. Yarn 可以自由地选择 executor 数量
  4. Yarn 是唯一支持 Spark 安全的集群管理器,使用 Yarn,Spark 可以运行于 Kerberized Hadoop 之上,在它们进程之间进行安全认证