测试目标
azkaban多executor下flow的分配方式
azkaban可以同时执行的flowjob个数
azkaban单个job最小使用的内存
相关配置
executor最大线程数: executor.maxThreads=50
executor同时执行的flow最大数 executor.flow.threads =30
executor每个flow最多同时执行的job数 flow.num.job.threads =10
测试
1.azkaban多executor下flow的分配方式
a.先启动flow20end_noop,该flow包含20个job
发最多只有10个job在执行.
查看主机上执行的任务情况:
[root@bqbpdevs2 conf]# ps -ef|grep "sleep 300" |grep -v grep -c
10
[root@bqbpdevs3 ~]# ps -ef|grep "sleep 300" |grep -v grep -c
0
发现先启动flow20end_noop只在节点2上运行,节点3上没有运行.
b.再启动一个任务flow30end_noop,该flow包含30个job
[root@bqbpdevs2 conf]# ps -ef|grep "sleep 300" |grep -v grep -c
10 ##flow20end_noop的10个任务
[root@bqbpdevs3 ~]# ps -ef|grep "sleep 300" |grep -v grep -c
10
发现flow30end_noop只在节点3上面运行,
c.再启动一个任务flow40end_noop
[root@bqbpdevs2 conf]# ps -ef|grep "sleep 300" |grep -v grep -c
10
[root@bqbpdevs3 ~]# ps -ef|grep "sleep 300" |grep -v grep -c
20
发现flow40end_noop只在节点3上启动.
以上测试说明,azkaban每个flow只会分配在一个节点上
2.azkaban可以同时执行的flowjob个数
a.最大支持的flow数
同时起了38个flow.
说明executor.flow.threads
这个参数是针对每个executor的而是不azkaban集群
b.测试azkban job最大并行度
[root@bqbpdevs2 conf]# ps -ef|grep "sleep 300" |grep -v grep -c
0
[root@bqbpdevs3 ~]# ps -ef|grep "sleep 300" |grep -v grep -c
101
启动了11个flow,这些flow刚好全启动在了节点3上.同时执行了101个job.
说明executor.maxThreads=50
不能控制每个节点上job的并行数.
3.azkaban单个job最小使用的内存
找到一个执行中的进程,查看内存:
每个sleep 命令大概用了620字节,并且系统中无其它azkaban进程(server除外)
说明azkaban在提交任务后会退出,所使用的内存由程序决定
总结
1.azkaban的每个flow中会分配到一个节点上执行
2.每个flow中同时执行的job数由flow.num.job.threads
决定
3.参数executor.maxThreads=50
在job运行时无效,应该是提交任务的线程数
4.每个节点能执行的最大job数= executor.flow.threads * flow.num.job.threads
5.azkaban提交任务后线程会退出,不占用内存.