【发布时间】:2015-04-29 19:57:28
【问题描述】:
我有一个 perl 脚本,我在其中提交一个 hadoop 命令以在后台运行,在另一个输入文件中的每个记录的 while 循环中。我的情况是,我必须将 hadoop 命令触发到 unix 并使其在后台运行,不要等待后台进程完成并转到输入文件中的下一条记录并触发下一条。 下面的代码在后台提交 hadoop 命令,但它等待它完成,我不想这样做。
open(my $data, '<', $file) or die "Could not open '$file' $!\n";
while (my $line = <$data>) {
chomp $line;
my @fields = split "," , $line;
if( $fields[7] == 'Y' ) {
`nohup sqoop export
--connect
"jdbc:sqlserver://sqlserver:1433;database=$fields[0];user=sa;password=pwd"
--table $fields[2]
--export-dir $src_dir
--input-fields-terminated-by '$fields[3]'
--input-lines-terminated-by '$fields[4]'
--m $fields[5]
--staging-table $fields[6]
--clear-staging-table
--batch > $tgt_dir/$fields[2].out & `;
echo $! > $pid_file;
}
else {
next;
}
}
请告诉我该怎么做..
另外,hadoop 命令可以运行几分钟以上。我必须让脚本等待后台命令,在 pid 的帮助下,这些命令被触发并通过 hadoop 命令根据 STDOUT 文件给出报告。
需要有关如何完成此操作的帮助....
【问题讨论】:
-
Perl 中的后台进程有很多很多问题,并且在 Web 其他地方也可以找到帮助。在这里提问之前,您需要付出更多的努力。
-
GNU Parallel你可能会感兴趣,gnu.org/software/parallel;这是用perl编写的。它可以快速完成您的工作,甚至无需编写复杂的程序来管理工作。
标签: perl