原理
Spark on YARN的原理就是依靠yarn来调度Spark,比默认的Spark运行模式性能要好的多,前提是首先部署好hadoop HDFS并且运行在yarn上,然后就可以开始部署spark on yarn了,假设现在准备环境已经部署完毕,这里是在CDH 环境下部署Spark
除了上面的环境准备,安装Spark前,还应该保证Scala正常安装,基于Scala的情况下,就可以开始部署Spark了,
首先还是解压Spark,安装位置就是/home/hdfs/software/
cd /home/hdfs/software
tar -xvzf spark-1.6.3-bin-hadoop2.6.tgz
ln -s spark-1.6.3-bin-hadoop2.6 spark
cd /home/hdfs/software
- 这里为了方便升级,使用/bigdata/sprak指向具体的spark目录,接下来可以配置环境变量,以方便随时输入命令来提交相关程序
然后同样是处理配置文件:
cp conf/spark-env.sh.template conf/spark-env.sh
cp conf/slaves.template conf/slaves
- 这时slaves不用做任何修改默认即可,如果有多台spark,也可以配置除master之外的主机名列表,这个不用配置也可以
- 需要把yarn用户下的 yarn 配置拷贝到 hdfs 用户下 ;
执行 vim conf/spark-env.sh 编辑配置文件,在最后追加如下配置:
export JAVA_HOME=/home/hdfs/software/jdk
//Scala目录
export SCALA_HOME=/home/hdfs/software/scala-2.10.6
//Master IP地址
export SPARK_MASTER_IP=192.168.88.240
//Worker运行内存
export SPARK_WORKER_MEMORY=32G
// hadoop配置文件目录 cdh中默认是如下目录 这个hadoop必须运行在yarn上 spark才能直接通过此配置文件目录通过yarn进行调度
export HADOOP_CONF_DIR=/home/hdfs/software/hadoop/etc/hadoop
//spark master端口 默认7077 下面是可选的
export SPARK_MASTER_PORT=7077
export SPARK_HOME=/home/hdfs/software/spark163
//此项默认 也是可选的
export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}
export SPARK_CLASSPATH=$SPARK_HOME/jars/hadoop-lzo-0.4.20-SNAPSHOT.jar:$SPARK_HOME/jars/mysql-connector-java-5.1.38-bin.jar:$SPARK_CLASSPATH
- 在spark163 下新建jars 将hadoop-lzo-0.4.20-SNAPSHOT.jar,mysql-connector-java-5.1.38-bin.jar放到jars下;
搭建问题
web ui 页面,想通过application id 查看作业详情,报下面的信息:
You (User dr.who) are not authorized to view application application_xxxx
这个问题是由于权限受限制,我们需要设置我们登录web页面的用户,在core-site.xml 文件添加如下设置:
<property>
<name>hadoop.http.staticuser.user</name>
<value>hdfs</value>
</property>
这样就会正常的打开application详情页面
为了在yarn UI 看到spark 执行日志,需要在/home/hdfs/software/spark/conf/spark-defaults.conf
添加:
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hdp-bjyn-cluster/user/spark/applicationHistory
//Spark运行历史Server的地址,主机:host,如:hdp1.bjyn.com:18080,注意不能包含http://
//默认不配置,必须开启Spark的historyServer之后才能配置。该地址用于Yarn ResourceManager在Spark应用程序结束时候,将该application的运行URL从ResourceManager的UI指向Spark historyServer UI。
spark.yarn.historyServer.address hdp1.bjyn.com:18080
启动spark historyserver
sbin/start-history-server.sh hdfs://hdp-bjyn-cluster/user/spark/applicationHistory
- 配置完这些项之后,spark就可以跑在yarn上了,到这里就部署完了,也没必要启动spark的master和slaves服务,因为是靠yarn进行任务调度,所以直接提交任务即可,也可以在yarn ui 的history中看到任务执行log
提交job示例
cd /home/hdfs/software/spark163
./bin/spark-submit –class org.apache.spark.examples.SparkPi –master yarn –deploy-mode cluster –driver-memory 1G –executor-memory 1G –executor-cores 1 /home/hdfs/software/spark16/lib/spark-examples-1.6.3-hadoop2.6.0.jar 40
参考
http://blog.csdn.net/zyj8170/article/details/58158966
spark-env.sh
export SPARK_HISTORY_OPTS=”-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://hdp-neunn-cluster/user/spark/applicationHistory“
sbin/start-history-server.sh