搭建spark集群
1. 修改配置文件
cd /home/cloud/platform/spark-2.3.3-bin-hadoop2.7/conf
***1.1 vim slaves***
(将所有节点的ip或者cloud1.cloud2加进去,如下图)
1.2 先将spark-env.sh 和spark-env.sh.template复制进来(其中两个文件中都被注释了,没有内容) , 只操作spark.env.sh , 其中在spark.env.sh要在最后一行对应一下java的jdk相应路径
在最后一行加上
export SPARK_MASTER_HOST=192.168.13.207 #主节点ip
export SPARK_MASTER_PORT=7077 # 必须为7077
export JAVA_HOME=/usr/local/jdk1.8.0_161
export SPARK_WORKER_MEMORY=96g
说明: 由于服务器配置问题 , 需要将spark的Memory(也就是spark的内存)改为96g , 所以
vim spark-env.sh
在最后一行加上
export SPARK_WORKER_MEMORY=96g
2、将配置完成的spark文件夹从主节点上面分发至集群所有从节点:
sudo scp -r /home/cloud/platform/spark-2.3.3-bin-hadoop2.7 cloud@cloud32:/home/cloud/platform/
sudo scp -r /home/cloud/platform/spark-2.3.3-bin-hadoop2.7 cloud@cloud33:/home/cloud/platform/
sudo scp -r /home/cloud/platform/spark-2.3.3-bin-hadoop2.7 cloud@cloud34:/home/cloud/platform/
3、 启动验证Spark
cd /home/cloud/platform/spark-2.3.3-bin-hadoop2.7
3.1 启动spark
./sbin/start-all.sh
3.2 验证spark
1)主节点使用jps命令
在主节点可以看到Master进程。
2)在每一个从节点使用jps命令
在从节点可以看到Worker进程。
或者输入 主节点ip:8080进入页面即可
4、停止spark
cd /home/cloud/platform/spark-2.3.3-bin-hadoop2.7
./sbin/stop-all.sh
5、 停止spark报错
因为Spark程序在启动后会在/tmp目录创建临时文件
spark-cloud-org.apache.spark.deploy.master.Master-1.pid
spark-cloud-org.apache.spark.deploy.worker.Worker-1.pid
在关闭的时候会去寻找是否还有这类的文件,若没有则会报以上的错误。若有,停止pid,并删除相关.pid文件。
但是在实际的场景,常常/tmp目录是会定时清空的,所以会导致上面的错误。进程仍然存在,但是却无法用stop-all.sh脚本关闭的情况发生。
解决办法:
1、强行kill掉worker和master,在重启spark就没问题。
2.、在/conf目录设置spark_env.sh文件加上export SPARK_PID_DIR=/home/ap/spark/app/pids。
指定worker定期清理功能
原理
在默认配置下,spark会将用户使用的hdfs上的jar包放在${SPARK_HOME}/work
目录下,由于spark程序打包经常出现问题,加上引用的依赖较多,所以jar包往往非常大,在频繁启动任务时会快速占满磁盘。
spark清理磁盘有若干配置项,
cd ${SPARK_HOME}/conf
#如果有spark-env.sh那么直接修改,如果没有的话,将spark-env.sh.template复制成spark-env.sh再修改
#下面的配置项代表的意义是启动清理流程,work路径保留86400秒,也就是一天,直接按这么配置就行
vim spark-env.sh
#添加下面这行,在别的export下面加上一行就行
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=86400"