这个问题一度困扰我很久,后来经过仔细研究,我可以让任务秒变running, 即使任务把机器跑挂了(因为我真把集群跑挂了)都不会是死在 Preparing状态不动。
问题根源:
1、没有找到满足条件的executor
2、找到了满足条件的executor,executor的设置的限制不满足
最多就这二点问题。
解决方法:
第一个问题,得先看看azkaban是怎么选举executor的,看一张关于选择器说明的图,原文后来找了一下没找到了
明白了每个选择器的用途,那就可以任意的调整了,可以把那些什么cpu、内存选择的通通干掉,什么最后一次执行的任务数、分配的任务数设置到很大,比如这样
#Multiple Executor
azkaban.use.multiple.executors=true
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.filters=StaticRemainingFlowSize
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=100
#azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=100
#azkaban.executorselector.comparator.CpuUsage=1
这样任务就不可能执行不起来。
但是,如果这样设置之后真出现了执行不起来的,一直死在Preparing状态,那就是第二个问题
azkaban-executor有两个配置,如下
# Azkaban Executor settings
executor.maxThreads=150(默认值50)
executor.flow.threads=100 (默认值30)
executor.flow.threads : 这个参数是控制当前executor允许启动任务的个数的
如果第一个问题的修改没解决问题,就干他,干到很大就完事。
我有两台测试机,这个参数设置是30的时候,启动60个任务之后后面的就起不来了,一直在准备状态不动, 我干到100跑spark任务,跑到70多个集群就跑挂了,但是秒变running.