使用processbuilder从java程序运行Yarn作业时出现文件不存在错误

juzqafwq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(496)

我正在尝试从java Package 程序运行一个yarn作业。mapreduce jar接受两个输入:
头文件:我不知道文件名,但位置和文件扩展名,只有一个文件在该位置
输入文件目录
除此之外,我还有一个输出目录。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();

运行时,出现以下错误:
线程“main”java.io.filenotfoundexception中出现异常:请求的文件/input/path/dir1/header/*.tsv不存在。
但当我运行与以下命令相同的命令时:

yarn jar jarfile.jar -Dmapred.job.queue.name=name -Dmapred.reduce.tasks=500 /input/path/dir1/HEADER/*.tsv /input/Dir /output/Dir/

一切正常。
从java运行命令时会出现什么问题?

fzsnzjdm

fzsnzjdm1#

这个 * 在本例中,被视为文本字符串的一部分,而不是通配符。因此,globbing不会扩展到所需的路径名。
如果目录中只有一个文件,为什么不找到它的路径并将其作为参数传递呢
如。

File dir = new File(INPUT_DIRECTORY+"/HEADER);
if (dir.list().length > 0)
    String HEADER_PATH = dir.list()[0].getAbsolutePath();

相关问题