我想同时触发几个hadoop作业。我使用executors.newfixedthreadpool创建了一个线程池。如果池大小为2,我的代码将使用“toolrunner.run”同时触发2个hadoop作业。在我的测试中,我注意到这两个线程一直在互相踩着。
当我在引擎盖下面查看时,我注意到toolrunner创建了genericoptionsparser,它反过来调用静态方法buildgeneraoptions。此方法使用“optionbuilder.withargname”,它使用名为“argname”的示例变量。这看起来不线程安全,我相信是我遇到的问题的根本原因。
有什么想法吗?
1条答案
按热度按时间luaexgnf1#
确认toolrunner不是线程安全的:
原始代码(遇到问题):
}
新代码(有效):