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

标签 linux hadoop grep hadoop-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

一个)

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}’ 中的应用程序;执行 yarn application -kill "$app";完成

感谢您对此的帮助。

最佳答案

xargs 读取 STDIN 流数据并将每一行转换为以空格分隔的命令参数。 xargs 在您的情况下可能不起作用的一些原因:

  1. 使用 xargs,此命令的参数 “yarn application -movetoqueue 'application_ID' -queue myqueue" 在其末尾传递。
  2. 并非所有应用程序/工具都接受多个空格分隔 论点。
  3. 您的命令的结果是一个包含特殊字符的字符串,应该用引号引起来。

所以,我建议如下:

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

关于linux - 将 xargs 值作为参数传递给后续 YARN 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46305560/

相关文章:

C-Linux-有什么方法可以将命令 "history"传递给 Linux shell?

linux - 写一些东西到 linux hid 设备?

java - 如何提高使用 mapreduce 分析日志文件的性能

linux - grep 递归 + 反向词 + 最后一场比赛

git - 通过短哈希获取 GIT 提交消息的更好方法?

regex - 如何使用 grep 查找仅包含小写字母的行

c - 程序终止时 Linux 套接字释放速度太慢

java - Hadoop Mapreduce 让 addInputPath 使用特定文件名

apache-spark - 映射减少问题,按值计算

linux - 我可以保护两个进程之间的内存吗