job.addCacheFile выдает ошибку FileNotFound - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь использовать job.addCacheFile для добавления файла в распределенный кеш в MapReduce для соединения на стороне карты, однако это выдает ошибку FileNotFound. Я просмотрел несколько похожих вопросов, но ни один из них не подходит для моего случая. Вот что я сделал, с oop 2.6.5

В классе драйверов

Configuration conf = super.getConf();

// absolute path on HDFS
// not sure if relative path or absolute path matters here
Path fileToBeCached = new Path("/test-data/cacheFiles");
d
Job job = Job.getInstance(conf);
output.getFileSystem(conf).delete(output, true);

FileSystem fs = fileToBeCached.getFileSystem(conf);
FileStatus filesStatus = fs.getFileStatus(fileToBeCached);

if (filesStatus.isDirectory()) {
    for (FileStatus f : fs.listStatus(fileToBeCached)) {
        if (f.getPath().getName().startsWith("part")) {
            job.addCacheFile(f.getPath().toUri());
        }
    }
} else {
    job.addCacheFile(fileToBeCached.toUri());
}

В классе Mapper:

public static class Map extends Mapper<Text, Text, Text, Text> {
    private Set<String> recordSet = new HashSet<String>();

    @Override
    protected void setup(Context context) throws IOException, InterruptedException {
        URI[] files = context.getCacheFiles();
        if (files.length > 0) {
            for (URI uri : files) {
                System.out.println("Cached file: " + uri);
                File path = new File(uri.getPath());
                loadCache(path);
            }
        }
    }

    private void loadCache(File file) throws IOException {
        recordSet.addAll(FileUtils.readLines(file));
    }
}
...