一:实现HA
1-基于zookeeper实现HA
配置spark-env.sh,master节点挂掉以后,会进行恢复操作。
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=192.168.114.200:2181,192.168.114.201:2181,192.168.114.202:2181 -Dspark.deploy.zookeeper.dir=/spark"
提交任务脚本(如果spark1这个master挂掉后,会寻找新的master,从而保证任务不会因为spark1挂掉而失败):
/opt/module/spark/bin/spark-submit --class com.zj.spark.applog.AppLogSpark --master spark://spark1:7077,spark2:7077 \ --deploy-mode client --num-executors 1 --driver-memory 600m --executor-memory 600m --executor-cores 1 --conf spark.cores.max=3 /opt/spark-study/mysparkstudy-1.0-SNAPSHOT-jar-with-dependencies.jar \
2- 基于文件系统实现HA(不推荐,需要手动启动)
spark-env.sh
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/usr/local/spark_recovery"
二:spark监控(基本上前两个就已经够使用了)
方式一:spark web UI获取正在运行的监控信息
port为4040
包括了以下信息
方式二:spark history web UI,获取历史 的监控信息
从18080端口中进入
可以设置的属性
方式三:RESTFUL API,需要安装curl工具
方式四:Metrics
定时将监控数据拉取到指定的路径下。
三:spark静态资源分配和动态资源分配
静态资源分配:在这种方式下,每个作业都会被给予一个它能使用的最大资源量的限额,并且可以在运行期间持有这些资源。
动态资源分配:当executor不再被使用的时候,spark就应该释放这些executor,并且在需要的时候再次获取这些executor。因为没有一个绝对的方法去预测一个未来可能会运行一个task的executor应该被移除掉,或者一个新的executor应该别加入,我们需要一系列的探索式算法来决定什么应该移除和申请executor。
driver会轮询式地申请executor。当在一定时间内(spark.dynamicAllocation.schedulerBacklogTimeout)有pending的task时,就会触发真正的executor申请,然后每隔一定时间后(spark.dynamicAllocation.sustainedSchedulerBacklogTimeout),如果又有pending的task了,则再次触发申请操作。
原文:https://www.cnblogs.com/parent-absent-son/p/11807040.html