我需要配置
hadoop.service.shutdown.timeout
的值,因为当我们的 MR 作业停止时关闭钩子会触发超时:
2023-08-25 08:44:39,566 [WARN] [Thread-0] [org.apache.hadoop.util.ShutdownHookManager] - ShutdownHook '' timeout, java.util.concurrent.TimeoutException
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at org.apache.hadoop.util.ShutdownHookManager.executeShutdown(ShutdownHookManager.java:124)
at org.apache.hadoop.util.ShutdownHookManager$1.run(ShutdownHookManager.java:95)
问题在于,只有在
core-site.xml
中设置了该值才生效。例如,如果我们将其作为属性添加到环境变量 YARN_OPTS (-D hadoop.service.shutdown.timeout
) 或在代码中设置它(传递给 ToolRunner
的 Configuration 类的实例),即使值发生变化(我们检查过)这是通过日志记录实现的),如果文件中未指定,则根据 core-site.xml
中的值或默认值触发超时。
此属性只能通过
core-site.xml
配置文件进行配置吗?
我相信简短的答案是“是”,仅通过
core-site.xml
,因为 Hadoop 的 ShutdownHookManager
在关闭执行器线程时通过读取 core-site.xml
创建一个新的配置对象。
长答案更长,但仍然是“可能是”,除非您找到一种方法来遵循上述类的注释中相当晦涩的建议,以使用
addShutdownHook()
: 显式注册钩子
> * Unless a hook was registered with a shutdown explicitly set through
> * {@link #addShutdownHook(Runnable, int, long, TimeUnit)},
> * the shutdown time allocated to it is set by the configuration option
> * {@link CommonConfigurationKeysPublic#SERVICE_SHUTDOWN_TIMEOUT} in
> * {@code core-site.xml}, with a default value of
> * {@link CommonConfigurationKeysPublic#SERVICE_SHUTDOWN_TIMEOUT_DEFAULT}