在使用azkaban的过程中发现有些任务失败是因为端口冲突,本身的kettle任务运行完成了,但在azkaban界面却认为任务执行失败根据报错信息查看源码发现错误信息如下:
下载Kettle7.0版本的源码可以看到:
报错发生在207行,因为socket端口被占用,查看START_PORT_NUMBER的值为:
检查kettle目录,发现无该配置项的设置,也就是说端口的起点为11000,出现Address already in use时通常前后任务较多,结合公司默认端口为11017,假设是因为端口向上递增到11017导致在检查端口时报错,在此假设的基础上调整默认端口为21000,同时将在10000以下的端口号向上调整。
在data-integration/system/karaf/etc 目录下检查karaf配置,在custom.properties中插入:
pentaho.karaf.instance.start.port=21000
在后续kettle任务执行时检查进程监听端口,发现未生效,失败依旧经常出现,再次查看源码,kettle在初始化时获取系统变量有一种方式是从KarafPorts.yaml获取信息,这个文件是这样的:
代码中读取此文件:
在KarafPorts.yaml中添加:
- id: INSTANCE_START_PORT
property: pentaho.karaf.instance.start.port
friendlyName: Instance Start Port
startPort: 21000
endPort: 27000
serviceName: karaf
通过观察Azkaban的日志
端口调整成功,随着时间检测问题是否解决