我有一个将大量文件转储到目录的应用程序。我想使用 hadoop 命令将这些文件复制到 Hadoop 集群。我使用以下代码来运行命令。
System.Diagnostics.ProcessStartInfo export = new System.Diagnostics.ProcessStartInfo();
export.RedirectStandardOutput = false;
export.RedirectStandardError = false;
export.UseShellExecute = false;
export.WorkingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
export.FileName = "hadoop";
export.Arguments = "fs -copyFromLocal " + Path.Combine(dumpDirectory, "*.txt") + " " + hadoopPath));
Console.WriteLine("Copying data: hadoop " + export.Arguments);
System.Diagnostics.Process proc = System.Diagnostics.Process.Start(export);
proc.WaitForExit();
if (proc.ExitCode == 0)
{
IEnumerable<string> files = Directory.EnumerateFiles(dumpDirectory);
foreach (string file in files)
File.Delete(file);
}
else
Console.WriteLine("Error copying to Hadoop: " + proc.ExitCode);
程序写入以下消息:
Copying data: hadoop fs -copyFromLocal local/directory/*.txt /user/remote/directory/
copyFromLocal: `local/directory/*.txt': No such file or directory
Error copying to Hadoop: 1
有趣的是,当我手动运行命令时,文件复制没有错误。
此外,如果程序在不使用 *.txt
的情况下运行命令,而是分别为每个文件调用命令,则命令会成功。
任何人都可以阐明这一点吗?
最佳答案
我通过创建包含给定命令的 bash 脚本部分解决了这个问题。我以编程方式运行 bash 脚本并且它有效。
但是,我仍然不知道为什么原来的不起作用。
关于c# - 如果进程以编程方式运行(来自 C#),则“没有这样的文件或目录”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993091/