spark优雅关闭

spark优雅关闭

sparkConf.set("spark.streaming.stopGracefullyOnShutdown", "true")

// 启动新的线程,希望在特殊的场合关闭SparkStreaming
new Thread(new Runnable {
    override def run(): Unit = {

        while ( true ) {
            try {
                Thread.sleep(5000)
            } catch {
                case ex : Exception => println(ex)
            }

            // 监控HDFS文件的变化
            val fs: FileSystem = FileSystem.get(new URI("hdfs://hadoop202:9000"), new Configuration(), "atguigu")

            val state: StreamingContextState = context.getState()
            // 如果环境对象处于活动状态,可以进行关闭操作
            if ( state == StreamingContextState.ACTIVE ) {

                // 判断路径是否存在
                val flg: Boolean = fs.exists(new Path("hdfs://hadoop202:9000/stopSpark2"))
                if ( flg ) {
                    context.stop(true, true)
                    System.exit(0)
                }

            }
        }

    }
}).start()

大数据优雅停止程序步骤

(1)通过Hadoop 8088页面找到运行的程序

(2)打开spark ui的监控页面

(3)打开executor的监控页面

(4)登录liunx找到驱动节点所在的机器ip以及运行的端口号(比如端口为56194)

(5)然后执行一个封装好的命令

 sudo ss -tanlp | grep 56194 |awk '{print $6}'|awk -F, '{print $2}'|awk -F= '{print $2}'|sudo xargs kill -15

最好现用一下命令核实一下情况:

sudo ss -tanlp | grep 56194 |awk '{print $6}'|awk -F, '{print $2}'|awk -F= '{print $2}'

kill命令介绍

1, kill -15 pid (kill -SIGTERM )(默认)

执行完该指令后,操作系统会发送一个 SIGTERM 信号给对应的程序。当程序接收到该信号后,可能会发生以下几种情况的一种:
1,当前程序立刻停止;
2,程序释放相应资源,然后再停止;
3,程序可能仍然继续运行。
大部分程序会先释放自己的资源,然后再停止。但是也有程序可以在接受到信号量后,继续做其他一些事情,并且这些事情是可以配置的。
如果程序正在等待IO,可能就不会立马做出响应。也就是说,(15) SIGTERM 是可能被阻塞、被忽略的。

2. kill -9 pid (kill -SIGKILL)

如果 (15) SIGTERM 可以不进行响应?
那(9) SIGKILL就是必杀信号,多半 ROOT 会直接使用这个命令,但并不推荐这么做
小结:在使用 kill -9 前,应该先使用 kill -15,给目标进程一个清理善后工作的机会。如果没有,可能会留下一些不完整的文件或状态,从而影响服务的再次启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值