本文主要讲解三个问题: 1 使用Java编写 MapReduce 程序时,如何向map、reduce函数传递参数。 2 使用Streaming编写MapReduce程序(C/C++, Shell, Python)时,如何向map、reduce脚本传递参数。 3 使用Streaming编写MapReduce程序(C/C++, Shell, Python)时,如何向map、reduce脚本传递文件或文件夹。 (1) streaming 加载本地单个文件 (2) streaming 加载本地多个文件 (3) streaming 加载本地目录 (4) streaming编程时在mapreduce脚本中读 hdfs 文件 (5) streaming编程时在mapreduce脚本中读 hdfs 目录
我们想停掉一个spring的进程,一般通过kill命令完成,常用的命令如 kill -2 pid(ctrl + C) 、 kill -9 pid 、 kill -15 pid 。
kill -9 可以认为 *** 作系统从内核级别直接强行kill进程,对服务来说没有任何的准备时间和清场时间,直接被kill掉,且无法被监听。
kill -2 和 -15 则是 *** 作系统给该进程发送一个信号通知,告知应用主动关闭,应用可以监听并接收到信号,可以完成一些关闭回收等动作,然后自我停止。
准确来说,这些关闭信号并不是由spring感知,而是由java线程 Signal Dispatcher 监听,此线程将收到的信号交给JVM,JVM判断信号种类,如果是-2/-15等关闭类型,则交由 java.lang.Shutdown 完成关闭,关闭前会触发所有的shutdown hook。
Runtime.getRuntime().addShutdownHook() 可以添加自定义的shutdown hook。
关于jvm关闭详细的原理分析过程请参考 java进程关闭事件监听
spring在启动过程中也是通过 Runtime.getRuntime().addShutdownHook() 来注册hook回调。
SpringApplication
在 SpringApplication 的 run 方法中,会调用 refreshContext ,默认情况下会调用 context.registerShutdownHook()
AbstractApplicationContext
在 AbstractApplicationContext. registerShutdownHook() ,实现了添加shutdown hook,对应的回调实现为 doClose()
其中 发布ContextClosedEvent事件 是非常关键的一步,所有希望完成清场 *** 作的业务或组件都可以监听此事件来完成触发。
整个回收过程还是比较简单的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)