Spark学习笔记四:Spark Yarn集群搭建

服务器准备

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-client 模式提交任务.jpg

Spark 基于Yarn-cluster 模式提交任务(生产用)

Spark 基于Yarn-cluster 模式提交任务.jpg

停止集群任务命令: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个。

你可能感兴趣的:(Spark学习笔记四:Spark Yarn集群搭建)