【问题标题】:windows storm supervisor error quit when storm kill topology风暴杀死拓扑时Windows Storm Supervisor错误退出
【发布时间】:2018-12-21 09:20:18
【问题描述】:

风暴版本:1.2.2 平台:Windows Server 2008

我已经在一台 linux 服务器和一台 Windows 服务器上安装了 Storm 集群。这两个服务器都部署了 nimbus 和 supervisor 服务。 我开始了一个拓扑,然后我杀死了它。发现windows服务器上的supervisor进程报错退出,windows服务器上的worker进程还活着。

表明:

“错误:无法杀死pid xxx进程,只能终止这个 进程(使用 \F 选项)。”

错误信息来自下图: error-info-pic

我不知道这个错误,我已经用谷歌搜索了一些答案,但没有找到,所以我把这个消息发给你。我希望你能帮助我。

于 2018 年 12 月 24 日更新

发现worker会启动一个topology进程,先kill topology error,然后kill supervisor时kill worker error。

我已经编译了一个新的storm-core.jar,并在supervisor kill worker时添加了一些详细日志,错误详细日志如下:

org.apache.storm.shade.org.apache.commons.exec.ExecuteException:进程退出并出现错误:128(退出值:128) 在 org.apache.storm.shade.org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:377) ~[storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.shade.org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160) ~[storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.shade.org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147) ~[storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.utils.Utils.execCommand(Utils.java:1914) ~[storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.utils.Utils.sendSignalToProcess(Utils.java:1943) [storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.utils.Utils.killProcessWithSigTerm(Utils.java:1962) [storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.daemon.supervisor.Container.kill(Container.java:166) [storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.daemon.supervisor.Container.kill(Container.java:184) [storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.daemon.supervisor.Slot.killContainerForChangedAssignment(Slot.java:311) [storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.daemon.supervisor.Slot.handleRunning(Slot.java:527) [storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.daemon.supervisor.Slot.stateMachineStep(Slot.java:265) [storm-core-1.2.2.jar:1.2.2] 在 org.apache.storm.daemon.supervisor.Slot.run(Slot.java:752) [storm-core-1.2.2.jar:1.2.2]

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

    这有点像在黑暗中拍摄,但是您是否以管理员身份运行 Storm 进程? Storm 需要在 Windows 上以管理员身份运行,或者您需要设置运行 Storm 的用户以允许创建符号链接。

    https://storm.apache.org/releases/2.0.0-SNAPSHOT/windows-users-guide.html 有一些关于在 Windows 上运行 Storm 的信息。

    【讨论】:

    • 我以管理员身份运行Storm,当我使用storm kill命令停止拓扑时,Windows服务器上的主管无法杀死工作进程,但是主管本身错误退出......
    • 我无法重现这个。在本地设置 Storm 1.2.2 并运行示例拓扑。我正在使用 Windows 10 并通过以管理员身份打开 Powershell 控制台并从它们启动 nimbus/supervisor/ui/zookeeper 来启动storm。当我终止拓扑时,主管会关闭工作人员并继续运行。
    • 可能这个问题只存在于Windows server 2008?
    • 我在 Windows 10 上尝试,主管也错误退出,它无法杀死工人。太诡异了……
    • 查看我更新的问题,我发现了一些添加的消息,但我仍然修复了这个问题。也许你可以给我一些建议。
    【解决方案2】:

    我新建了一个storm-core.jar,在“org.apache.storm.utils.Utils::sendSignalToProcess”函数中,我添加了一些log msg,如下:

    public static void sendSignalToProcess(long lpid, int signum) throws IOException {
        String pid = Long.toString(lpid);
        try {
            // add this log
            LOG.info("Added: {}.", signum);
            if (isOnWindows()) {
                // change this condition
                if (signum == SIGKILL || signum == SIGTERM) {
                    // change this code
                    execCommand("taskkill", "/F", "/T", "/pid", pid);
                } else {
                    execCommand("taskkill", "/pid", pid);
                }
            } else {
                execCommand("kill", "-" + signum, pid);
            }
        } catch (ExecuteException e) {
            LOG.info("Error when trying to kill {}. Process is probably already dead.", pid);
        } catch (IOException e) {
            LOG.info("IOException Error when trying to kill {}.", pid);
            throw e;
        }
    }
    

    我发现在storm kill topology的时候supervisor会发送signal 15(term)给worker,但是supervisor在使用signal 15的时候不能killworker,它必须使用sigal 9(kill)来强制kill。所以我决定在 Windows 服务器上使用新编译的storm-code.jar。

    我仍然不知道为什么主管不能杀死工人使用信号15而只使用信号9(即:taskkill使用/F选项可以杀死工人),但这应该是一个windows问题,所以我关闭了这个问题.

    【讨论】:

    • 只是为了跟进这一点,我曾经看到过这种情况发生过一次,当时工人在主管试图关闭它的同时崩溃了。这个错误不应该杀死主管。正如您在上面发布的代码中看到的那样,ExecuteException 不会杀死主管。我的主管反而死了,因为它未能删除一个已打开以供阅读的文件。也许这也是你正在发生的事情。
    猜你喜欢
    • 2018-06-09
    • 2018-07-19
    • 1970-01-01
    • 2014-01-14
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2015-11-14
    相关资源
    最近更新 更多