记录解决Azkaban调用kettle报错:Address already in use

在使用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

代码中读取此文件:

在KarafPorts.yaml中添加:

- id: INSTANCE_START_PORT

  property: pentaho.karaf.instance.start.port

  friendlyName: Instance Start Port

  startPort: 21000

  endPort: 27000

  serviceName: karaf

通过观察Azkaban的日志

端口调整成功,随着时间检测问题是否解决

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容