Storm 2.3.0传递StormCrawler爬虫YAML配置时触发空指针异常
Storm 2.3.0提交拓扑时自定义YAML配置加载失败触发空指针异常
问题场景
本地单机模式运行Storm 2.3.0,提交带自定义爬虫YAML配置的拓扑时,配置中的预期属性无法加载,触发空指针异常。提交命令如下:
storm jar stormcrawler.jar topology.BasicTopology -conf conf/crawler-conf.yaml
自定义配置文件conf/crawler-conf.yaml内容:
config: topology.workers: 1 topology.es.spouts: 1
错误信息
运行时抛出空指针异常:
Exception in thread "main" java.lang.NullPointerException at topology.BasicTopology.run(BasicTopology.java:78)
对应BasicTopology.java代码片段:
@Override protected int run(String[] args) { log.info(this.conf.keySet().toString()); int nbWorkers = (int) this.conf.get("topology.workers"); // 触发NPE }
根因分析
Storm 2.3.0新增的参数解析器会将单短横线的-conf识别为Storm通用配置的-c标志,错误地把"onf"当作Storm选项,最终以-Dstorm.options=onf方式运行。这导致拓扑仅收到conf/crawler-conf.yaml参数,因缺少正确的-conf前缀,YAML配置文件未被解析,this.conf中不存在topology.workers属性,触发空指针异常。该问题在Storm 1.2.2中不会出现。
解决方案
使用双短横线的--conf替代单短横线的-conf指定自定义配置文件,修正后的提交命令:
storm jar stormcrawler.jar topology.BasicTopology --conf conf/crawler-conf.yaml
或通过--分隔Storm通用参数与拓扑自定义参数,确保参数解析器正确识别:
storm jar stormcrawler.jar topology.BasicTopology -- -conf conf/crawler-conf.yaml
内容的提问来源于stack exchange,提问作者Patricio Page
相关产品推荐
相关产品推荐

