Sooo ... 我试图使用参数化的hql脚本(foo_bar.hql)将大量的原始数据加载到某些配置单元表中,但原始数据由/ yyyy/mm/dd进行目录分区,所以我编写了一个shell脚本来打印出具有日期参数的单个配置单元命令,每行一个字符以表示粗壮。 shell脚本输出看起来是这样的:如何使用xargs运行nohup子进程池?
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输出被遗忘,使其不堵塞东西以及在后台启动蜂巢命令)
如果单独运行,这些命令中的每一个都需要花费大量时间才能完成。我有很多需要运行的东西,所以我试图通过使用xargs运行子进程池来并行化整个事情。我的用法如下:
bash bar_baz.sh | xargs -n 1 -I CMD -P 5 bash -c CMD
是有原因的,我不能确定,xargs的-P 5个并发的子进程的数目不限制为5,所有打印的命令由shell脚本粗壮得同时执行,Hive随后崩溃。我觉得这与nohup有关,但是通过查看xargs和nohup的手册页并查看interwebs的相似用法示例后,我仍然无法弄清楚发生了什么。
任何帮助将不胜感激!谢谢!
尝试从文件中删除&。 -P选项必须为你做并行处理 – Tamar