某次运行一个需要运行很久的MR,使用nohup指令,可以后台不挂起运行程序,结果可以保存到本地。
使用场景:
显示所有在集群上的进程
yarn application --list | grep xxx
杀掉已经运行进程,把原本开的MR程序关掉
yarn application -kill application_1540343976274_8252
yarn application -kill application_1540343976274_8256
以nohup执行,结果存储在user5.log中
nohup yarn jar user5.jar com.dayou.wang.myRunner > user5.log 2>&1&
关机让集群自己跑就好了
可以查看一下日志内容,程序运行完的话,用cat指令就可以了。
tail -f user5.log
让我们来看标红的这句话。
包含三个知识点。
①&
当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。例如:sh test.sh &
但是作业在后台运行一样会将结果输出到屏幕上,如果不需要显示到屏幕上,可以使用下面的方法把它的输出重定向到某个文件中,这就是涉及到了输出重定向问题:
command > out.file 2>&1 &
这个指令会把结果保存在out.file中。
②2>&1
要解释这个指令,还是得提到文件重定向。我们知道>和<是文件重定向符。那么1和2是什么?在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2。所以这里2>&1 的意思就是将标准错误也输出到标准输出当中。
那么对于2>&1
也就好理解了,2就是标准错误,1是标准输出,那么这条命令不就是相当于把标准错误重定向到标准输出么。这里是&1而不是1,这里&是什么?这里&
相当于等效于标准输出。
③nohup
使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:
nohup command &
三个知识点相结合,就是我们标红的指令的功能了!
后台不挂起运行user5.jar,并将结果报存在日志文件中。