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

时间:2017-09-19 16:32:39

标签: linux hadoop grep yarn xargs

需要帮助将参数从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

请你帮忙找到合适的命令来实现同样的目标吗?

类似的设置在下面的命令中对我有效,但在上面没有,因为上面的命令有n

a)

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

这是另一种方式..

b。)for yarn application -list -appStates RUNNING | grep <user> | awk '{print $1}’中的应用;做纱线申请-kill&#34; $ app&#34 ;;完成

感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

xargs 读取 STDIN 流数据,并将每一行转换为与命令对应的空格分隔参数。 xargs可能无法解决的一些原因:

  1. 使用xargs,此命令的参数“纱线应用程序 -movetoqueue'application_ID' -queue myqueue“在它结束时传递。
  2. 并非所有应用程序/工具都接受多个空格分隔 参数。
  3. 您的命令结果是一个包含特殊字符的字符串,应该引用它。
  4. 所以,我建议如下:

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