运行 来自 java 程序的纱线作业使用 ProcessBuilder 给出文件不存在错误
Running yarn job from java program using ProcessBuilder gives file does not exist error
我正在尝试从 java 包装器程序 运行 纱线作业。 mapreduce jar 接受两个输入:
- 一个头文件:我不知道文件名,只知道位置和文件扩展名,而且那个位置只有一个文件
- A 输入文件目录
除此之外,我还有一个输出目录。
ProcessBuilder 代码如下所示:
HEADER_PATH = INPUT_DIRECTORY+"/HEADER/*.tsv";
INPUT_FILES = INPUT_DIRECTORY+"/DATA/";
OUTPUT_DIRECTORY = OUTPUT_DIRECTORY+"/";
ProcessBuilder mapRProcessBuilder = new ProcessBuilder("yarn","jar",JAR_LOCATION,"-Dmapred.job.queue.name=name","-Dmapred.reduce.tasks=500",HEADER_PATH,INPUT_DIRECTORY,OUTPUT_DIRECTORY);
System.out.println(mapRProcessBuilder.command().toString());
Process mapRProcess = mapRProcessBuilder.start();
在 运行 上,我收到以下错误:
Exception in thread "main" java.io.FileNotFoundException: Requested
file /input/path/dir1/HEADER/*.tsv does not exist.
但是当我 运行 与 :
相同的命令时
yarn jar jarfile.jar -Dmapred.job.queue.name=name -Dmapred.reduce.tasks=500 /input/path/dir1/HEADER/*.tsv /input/Dir /output/Dir/
一切正常。
当 运行ning 来自 java 的命令导致此问题时,可能是什么问题?
在这种情况下,*
被视为文字字符串的一部分,而不是通配符。因此,通配符不会扩展到您想要的路径名。
如果目录中只有一个文件,为什么不找到它的路径并将其作为参数传递
例如
File dir = new File(INPUT_DIRECTORY+"/HEADER);
if (dir.list().length > 0)
String HEADER_PATH = dir.list()[0].getAbsolutePath();
我正在尝试从 java 包装器程序 运行 纱线作业。 mapreduce jar 接受两个输入:
- 一个头文件:我不知道文件名,只知道位置和文件扩展名,而且那个位置只有一个文件
- A 输入文件目录
除此之外,我还有一个输出目录。 ProcessBuilder 代码如下所示:
HEADER_PATH = INPUT_DIRECTORY+"/HEADER/*.tsv";
INPUT_FILES = INPUT_DIRECTORY+"/DATA/";
OUTPUT_DIRECTORY = OUTPUT_DIRECTORY+"/";
ProcessBuilder mapRProcessBuilder = new ProcessBuilder("yarn","jar",JAR_LOCATION,"-Dmapred.job.queue.name=name","-Dmapred.reduce.tasks=500",HEADER_PATH,INPUT_DIRECTORY,OUTPUT_DIRECTORY);
System.out.println(mapRProcessBuilder.command().toString());
Process mapRProcess = mapRProcessBuilder.start();
在 运行 上,我收到以下错误:
Exception in thread "main" java.io.FileNotFoundException: Requested file /input/path/dir1/HEADER/*.tsv does not exist.
但是当我 运行 与 :
相同的命令时yarn jar jarfile.jar -Dmapred.job.queue.name=name -Dmapred.reduce.tasks=500 /input/path/dir1/HEADER/*.tsv /input/Dir /output/Dir/
一切正常。
当 运行ning 来自 java 的命令导致此问题时,可能是什么问题?
在这种情况下,*
被视为文字字符串的一部分,而不是通配符。因此,通配符不会扩展到您想要的路径名。
如果目录中只有一个文件,为什么不找到它的路径并将其作为参数传递
例如
File dir = new File(INPUT_DIRECTORY+"/HEADER);
if (dir.list().length > 0)
String HEADER_PATH = dir.list()[0].getAbsolutePath();