官方文档:
http://spark.apache.org/docs/latest/running-on-yarn.html
配置安装
1.安装hadoop:需要安装HDFS模块和YARN模块,HDFS必须安装,spark运行时要把jar包存放到HDFS上
2.安装Spark:解压Spark安装程序到一台服务器上,修改spark-env.sh配置文件,sparh程序将作为YARN的客户端用于提交任务
vi spark-env.sh
export JAVA_HOME=/usr/local/jdk1.7.0_79/
export SPARK_MASTER_IP=minimaster
export SPARK_MASTER_PORT=7077
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop/
3.启动HDFS和YARN
4.运行模式分为cluster模式和client模式
1.cluster模式 : Driver程序在YARN中运行,应用的运行结果不能在客户端显示,所以最好运行那些将结果最终保存在外部存储介质(如HDFS,Redis,Mysql)而非stdout输出的应用程序,客户端的终端显示的仅是作为YARN的job的简单运行状况
Spark Driver首先作为一个ApplicationMaster在YARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的NodeManager节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理全生命周期的应用
具体过程:
1.由client向RM(Resource Manager)提交请求,并上传jar到HDFS上
这期间包括4个步骤:
1.连接到RM
2.从RM的ASM(ApplicationManager)中获得metric,queue和resource等信息
3.upload app jar and spark-assembly jar
4.设置运行环境和container上下文(launch-container.sh等脚本)
2.RM向NM(NodeManager)申请资源,创建Spark ApplicationMaster(每个SparkContext都有一个ApplicationMaster)
3.NM启动AM,并向RM ASM注册
4.AM从HDFS中找到jar文件,启动SparkContext,DAGsheduler 和 YARNCluster Scheduler
5.ASM向RM注册申请container资源
6.RM通知NM分配container,这时可以收到来自ASM关于container的报告(每个container对应一个executor)
7.Spark ApplicationMaster 直接和container(executor)进行交互,完成这个分布式任务
2.client模式 : Driver运行在Client上,应用程序运行结果会在客户端显示,所有适合运行结果有输出的应用程序(spark-shell)
5.运行:
cluster模式:
cd /usr/local/spark-1.6.1/
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
lib/spark-examples*.jar \
100
在页面上访问http://192.168.222.156:8088
查找运行完毕后的logs文件查看结果
问题结果显示
RM Home
NodeManager
Tools
java.lang.Exception: Unknown container. Container either has not started or has already completed or doesn’t belong to this node at all.
问题解决方案:
cd /usr/local/hadoop/etc/hadoop/
vi yarn-site.xml
yarn.log.server.url
http://hadoop1:19888/jobhistory/logs
重新分发yarn-site.xml
scp -r /usr/local/hadoop/etc/hadoop/yarn-site.xml miniSlave1:/usr/local/hadoop/etc/hadoop
scp -r /usr/local/hadoop/etc/hadoop/yarn-site.xml miniSlave2:/usr/local/hadoop/etc/hadoop
启动:
mr-jobhistory-daemon.sh start historyserver
重新运行:
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
lib/spark-examples*.jar \
100
结果显示:
最后一行就是结果展示