将xargs值作为参数传递给后续命令

dy1byipe  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(474)

需要从xargs传递参数到后续hadoop命令的帮助。
我从这个命令得到如下结果。

yarn application -list -appStates RUNNING | grep <user> | awk '{print $1}'

以上命令的结果如下。

17/09/19 12:24:36 INFO client.ConfiguredRMFailoverProxyProvider:
Failing over to rm21 Total Application-Id
application_1505017974932_14847 
application_1505017974932_14815
application_1505017974932_14810 
application_1505017974932_14784
application_1505017974932_14796 
application_1505017974932_14778

我需要能够通过上面的输出一个接一个下面的命令。

yarn application -movetoqueue <application_ID of above output> -queue myqueue

你能帮我找到正确的命令来达到同样的效果吗?
类似的设置在下面的命令中对我起作用,但在上面的命令中不起作用
(一)

yarn application -list -appStates RUNNING | grep <user> | awk '{print $1}' | xargs -n 1 yarn application -kill

这是另一种方式。。
b、 )中的应用程序 yarn application -list -appStates RUNNING | grep <user> | awk '{print $1}’ ; do yarn application-杀死“$app”;完成
感谢你在这方面的帮助。

m2xkgtsf

m2xkgtsf1#

xargs 阅读 STDIN 流数据,并将每行转换为命令的空格分隔参数。xargs在您的案例中可能不起作用的一些原因:
使用xargs,此命令的参数“yarn application-movetoqueue'application\u id'-queue myqueue”在其末尾传递。
并非所有的应用程序/工具都接受多个空格分隔的参数。
命令的结果是一个包含特殊字符的字符串,应该用引号引起来。
因此,我建议如下:

for appid in `yarn application -list -appStates RUNNING | grep user|awk '{print $1}'` ; do 
    yarn application -movetoqueue "${appid}" -queue myqueue;
done

相关问题