服务器准备
Spark Yarn集群搭建基于HDFS,需参照【Hadoop学习笔记四:基于Yarn的MapReduce集群搭建】搭建好高可用的Yarn-Hadoop集群。
Spark集群使用上篇文章【Spark学习笔记三:Spark Standalone集群搭建】安装的Spark Standalone集群。
修改Hadoop配置
如果基于Hadoop提交任务 需要修改 hadoop配置中JDK版本
需要修改的文件
hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
所有节点修改
[root@node01 ~] cd /opt/sxt/hadoop-2.6.5/etc/hadoop
[root@node01 hadoop] vi hadoop-env.sh
#修改
export JAVA_HOME=/opt/sxt/jdk1.8.0_181
修改完成后启动HDFS集群
#Node01上执行
[root@node01 hadoop] start-all.sh
#Node03 Node04上执行
[root@node01 hadoop] yarn-daemon.sh start resourcemanager
HDFS WebUI:
http://node01:50070
http://node02:50070
Yarn WebUI :
http://node03:8088/cluster
基于yarn 提交任务有可能报错虚拟内存不足,可在每台节点中的yarn-site.xml中配值关闭虚拟内存检查
[root@node01 ~] cd /opt/sxt/hadoop-2.6.5/etc/hadoop
[root@node01 hadoop] vi yarn-site.xml
#添加配置
yarn.nodemanager.vmem-check-enabled
false
启动Spark Yarn集群
#Node01上执行
[root@node01 /] cd /opt/sxt/spark-2.3.1/sbin/
[root@node01 sbin] ./start-all.sh
[root@node01 sbin] jps
#Node01
1175 Jps
1103 Master
#node02和node03
1168 Jps
1103 Worker
浏览器查看 http://node01:8888(不配置的话默认8080)
向Spark Yarn集群提交任务
提交实例:计算π的值
/opt/sxt/spark-2.3.1/examples/jars 下有example的jar包
#在Node01上提交
[root@node01 ~] cd /opt/sxt/spark-2.3.1/bin
[root@node01 bin] ./spark-submit
--master yarn
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
#结果
2019-12-24 00:10:18 INFO DAGScheduler:54 - Job 0 finished: reduce at SparkPi.scala:38, took 73.106669 s
Pi is roughly 3.1412499141249914
提交报错
Exception in thread "main" java.lang.Exception: When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR
must be set in the environment. at org.apache.spark.deploy.SparkSubmitArguments.validateSubmitArguments(SparkSubmitArguments.scala:288)
at org.apache.spark.deploy.SparkSubmitArguments.validateArguments(SparkSubmitArguments.scala:248)
at org.apache.spark.deploy.SparkSubmitArguments.(SparkSubmitArguments.scala:120)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:130)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
解决:
在客户端(Node04)上配置
[root@node04 conf] cd /opt/sxt/spark-2.3.1/conf
[root@node04 conf] cp spark-env.sh.template spark-env.sh
[root@node04 conf] vi spark-env.sh
#配置
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# ./bin/run-example or ./bin/spark-submit
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public dns name of the driver program
停止集群
#Node01上执行
[root@node01 sbin] ./stop-all.sh
node03: stopping org.apache.spark.deploy.worker.Worker
node02: stopping org.apache.spark.deploy.worker.Worker
stopping org.apache.spark.deploy.master.Master
Spark 基于Yarn-client 模式提交任务(测试用)
Spark 基于Yarn-cluster 模式提交任务(生产用)
停止集群任务命令:yarn application -kill applicationID
Spark-Submit提交参数
Options:
--master
MASTER_URL, 可以是spark://host:port, mesos://host:port, yarn, yarn-cluster,yarn-client, local
--deploy-mode
DEPLOY_MODE, Driver程序运行的地方,client或者cluster,默认是client
--class
CLASS_NAME, 主类名称,含包名
--jars
逗号分隔的本地JARS, Driver和executor依赖的第三方jar包
--files
用逗号隔开的文件列表,会放置在每个executor工作目录中
--conf
spark的配置属性
--driver-memory
Driver程序使用内存大小(例如:1000M,5G),默认1024M
--executor-memory
每个executor内存大小(如:1000M,2G),默认1G
Spark standalone with cluster deploy mode only:
--driver-cores
Driver程序的使用core个数(默认为1),仅限于Spark standalone模式
Spark standalone or Mesos with cluster deploy mode only:
--supervise
失败后是否重启Driver,仅限于Spark alone或者Mesos模式
Spark standalone and Mesos only:
--total-executor-cores
executor使用的总核数,仅限于SparkStandalone、Spark on Mesos模式
Spark standalone and YARN only:
--executor-cores
每个executor使用的core数,Spark on Yarn默认为1,standalone默认为worker上所有可用的core。
YARN-only:
--driver-cores
driver使用的core,仅在cluster模式下,默认为1。
--queue
QUEUE_NAME 指定资源队列的名称,默认:default
--num-executors
一共启动的executor数量,默认是2个。