这里我们使用 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 executor 作为一个 YARN 容器 (container) 运行。Spark 可以使得多个 Tasks 在同一个容器 (container) 里面运行