Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用xargs运行nohup子流程池?_Linux_Bash_Parallel Processing_Hive_Threadpool - Fatal编程技术网

Linux 如何使用xargs运行nohup子流程池?

Linux 如何使用xargs运行nohup子流程池?,linux,bash,parallel-processing,hive,threadpool,Linux,Bash,Parallel Processing,Hive,Threadpool,我试图使用参数化的hql脚本(foo_bar.hql)将大量原始数据加载到一些配置单元表中,但是原始数据是按/yyy/mm/dd进行目录分区的,因此我编写了一个shell脚本来打印带有日期参数的各个配置单元命令,每行一个。shell脚本输出如下所示: nohup hive -f foo_bar.hql -hiveconf MONTH=06 -hiveconf DAY=01 >/dev/null 2>1& & nohup hive -f foo_bar.hql -hiv

我试图使用参数化的hql脚本(foo_bar.hql)将大量原始数据加载到一些配置单元表中,但是原始数据是按/yyy/mm/dd进行目录分区的,因此我编写了一个shell脚本来打印带有日期参数的各个配置单元命令,每行一个。shell脚本输出如下所示:

nohup hive -f foo_bar.hql -hiveconf MONTH=06 -hiveconf DAY=01 >/dev/null 2>1& &
nohup hive -f foo_bar.hql -hiveconf MONTH=06 -hiveconf DAY=02 >/dev/null 2>1& &
nohup hive -f foo_bar.hql -hiveconf MONTH=06 -hiveconf DAY=03 >/dev/null 2>1& &
nohup hive -f foo_bar.hql -hiveconf MONTH=06 -hiveconf DAY=04 >/dev/null 2>1& &
...
/dev/null 2>1&&
部分将nohup.out输出传递到oblivion,这样它就不会阻塞东西,并且还会在后台启动hive命令)

如果单独运行,则每个命令都需要相当长的时间才能完成。我有很多需要运行的,所以我尝试通过使用xargs运行子进程池来并行化整个过程。我的用法如下:

bash bar_baz.sh | xargs-n1-I CMD-p5 bash-c CMD

出于我无法确定的原因,xargs-P5没有将并发子进程的数量限制为5,shell脚本打印到stout的所有命令都会同时执行,并且配置单元随后会崩溃。我觉得这与nohup有关,但在浏览了xargs和nohup的手册页并在互联网站上搜索类似的用法示例后,我仍然无法弄清楚发生了什么

任何帮助都将不胜感激!谢谢

解释 出于我无法确定的原因,xargs-p5没有将并发子进程的数量限制为5,shell脚本打印到stout的所有命令都会同时执行

实际上,它们被限制为5个,但是由于命令被立即发送到后台(由于shell脚本输出中的
&
),由xargs启动的bash也会立即退出。因此,虽然xargs实际上一次最多运行5个进程,但它在很短的时间内启动了所有进程,因为它们只运行很短的时间

解决方案 我建议:

  • 删除
    &
    –xargs依赖于未置于后台的进程
  • 要么:
  • 如果可能,将xargs移动到
    bar_baz.sh
    ,或
  • bash bar_baz.sh | xargs…
    放入另一个脚本中
  • 从单个命令中删除
    nohup
  • 使用
    nohup
    运行
    bar_baz.sh
    (1)或其他脚本(2)
  • 可选:您还可以摆脱单个命令的输出重定向,因为您可以一次重定向整个脚本的输出
旁注 不相关,但这也是错误的:从STDERR到STDOUT的输出重定向不是
2>1&
——它必须是。

解释 出于我无法确定的原因,xargs-p5没有将并发子进程的数量限制为5,shell脚本打印到stout的所有命令都会同时执行

实际上,它们被限制为5个,但是由于命令被立即发送到后台(由于shell脚本输出中的
&
),由xargs启动的bash也会立即退出。因此,虽然xargs实际上一次最多运行5个进程,但它在很短的时间内启动了所有进程,因为它们只运行很短的时间

解决方案 我建议:

  • 删除
    &
    –xargs依赖于未置于后台的进程
  • 要么:
  • 如果可能,将xargs移动到
    bar_baz.sh
    ,或
  • bash bar_baz.sh | xargs…
    放入另一个脚本中
  • 从单个命令中删除
    nohup
  • 使用
    nohup
    运行
    bar_baz.sh
    (1)或其他脚本(2)
  • 可选:您还可以摆脱单个命令的输出重定向,因为您可以一次重定向整个脚本的输出
旁注
不相关,但这也是错误的:从STDERR到STDOUT的输出重定向不是
2>1&
–它必须是这样。

尝试从文件中删除(&D)-P选项必须为youtry执行并行化以从文件中删除&-P选项必须为您执行并行化绝对是很棒的响应,我非常感谢您的解释!还感谢您指出这个输入错误-它解释了为什么我有一个名为1的文件,它看起来与以前的nohup.out文件非常接近…绝对是很棒的回答,我非常感谢您的解释!还感谢您指出这个输入错误-它解释了为什么我有一个名为1的文件,它看起来与以前的nohup.out文件非常接近。。。