我正在通过将存档发送到分布式缓存–Dmapred.cache.archives=hdfs://host:port/path/archive.zip#foldername –D.mapred.create.symlink=yes
,它在工作目录中创建一个新文件夹并取消存档那里的文件。问题是我需要工作目录中的这些文件,并且我已经尝试使用.
and./
作为文件夹名称以及发送一个空文件。除了在我的 Java 代码中显式移动文件之外,关于如何解决这个问题的任何想法?
问问题
1482 次
1 回答
0
文件在工作目录中的具体需求是什么(所以我可以理解并提出一些替代方案)。
无论如何,看起来分布式缓存中的档案总是会被解压到一个目录中,所以我认为你不能使用档案来解决这个问题 - 但是,根据你希望放置在工作目录中的文件数量,你可以使用分布式缓存中的文件。
例如,使用 GenericOptionsParser 参数,您可以指定要包含的文件和文件夹,然后在工作目录中可用:
public static class DistCacheMapper extends
Mapper<LongWritable, Text, NullWritable, NullWritable> {
@Override
public void run(Context context) throws IOException,
InterruptedException {
Configuration conf = context.getConfiguration();
System.err.println("Local Files:");
listFiles(new File("."), "");
}
private void listFiles(File dir, String ident) {
for (File f : dir.listFiles()) {
System.out.println(ident + (f.isDirectory() ? "d" : "-") + "\t"
+ f.getName());
if (f.isDirectory()) {
listFiles(f, ident + " ");
}
}
}
}
例如 withhadoop jar myjar.jar -files pom.xml,.project,.classpath,src dummy.txt
在 stderr 上给出以下内容(你可以看到它已经占用了 src 文件夹):
- .classpath
- .project
d tmp
- pom.xml
d src
d test
d resources
d java
d main
d resources
d java
d csw
d sandbox
- DistCacheJob.java
- .DistCacheJob.java.crc
- job.jar
- .job.jar.crc
因此,总而言之,您将不得不在 Dist Cache 文件中列出工作目录中所需的所有文件,并且子目录可以列为档案,也可以列为使用文件。
于 2012-08-11T02:38:28.217 回答