在包含空间的路径中使用 jar 设置 mapreduce.job.jar

Posted

技术标签:

【中文标题】在包含空间的路径中使用 jar 设置 mapreduce.job.jar【英文标题】:Setting mapreduce.job.jar with a jar in path containing space 【发布时间】:2015-06-12 21:43:59 【问题描述】:

我正在尝试编写一个 mapreduce 程序,其中一个步骤是使用文件设置 mapreduce.job.jar。如果文件位于不包含空格的路径中,则程序可以正常工作。但是路径包含空格,路径被编码了,我会得到一个找不到jar的错误。

假设工作 jar 在 /home/myname/workspace/myMapReduce.jar 下 当我用这个路径设置mapreduce.job.jar时,就可以了。

Configuration conf = job.getConfiguration();       
conf.set("mapreduce.job.jar", file.toURI().toURL().toString());

但如果路径是 /home/my name/workspace/myMapReduce.jar('my' 和 'name' 之间的空格),则

file.toURI().toURL().toString()

将路径编码为/home/my%20name/workspace/myMapReduce.jar,这会使mapreduce程序失败,因为该目录下没有这样的jar。

那么有没有办法在包含空间的路径中设置 mapreduce jar?否则,除了使用 file.toURI().toURL().toString() 之外,我如何设置 mapreduce.job.jar?

【问题讨论】:

【参考方案1】:

您是否尝试使用“\”转义空格字符?

在您的示例中: /home/my\ name/workspace/myMapReduce.jar

【讨论】:

我没有硬编码路径,我使用 file.toURI().toURL().toString()。要转义,如何将文件转换为有效名称?具体来说,调用哪些方法? 文件实例究竟包含什么?它是如何创建的? 文件指向 myMapReduce.jar。 File file = new File("/home/我的名字/workspace/myMapReduce.jar"); 无论如何:在这种情况下我不会使用 toURL 方法,因为空格将被“%20”替换。 这是我的问题,你用什么来代替 toURL?

以上是关于在包含空间的路径中使用 jar 设置 mapreduce.job.jar的主要内容,如果未能解决你的问题,请参考以下文章

帮我看看在Servlet里要访问js文件 路径要怎么设置

jar清单中的绝对路径名与相对路径名

无法在 Windows 上使用 jar 命令

ngdbc.jar 的会话使用细节或实现细节

为类路径设置文件夹[重复]

SBT:如何创建实用程序 jar 作为构建后步骤以将所有依赖 jar 包含在类路径中