configure() не вызывается при работе в кластере Hadoop, но может вызываться в Eclipse, DistributedCache FIleNotFoundException

Моя программа использует DistributedCache для кэширования файлов

JobConf conf = new JobConf(new Configuration(), ItemMining.class);
DistributedCache.addCacheFile(new URI("output1/FList.txt"), conf);
DistributedCache.addCacheFile(new URI("output1/GList.txt"), conf);

Я получаю файлы в

configure(){

..
localFiles = DistributedCache.getLocalCacheFiles(job);
FileSystem fs = FileSystem.get(job);
FSDataInputStream inF = fs.open(localFiles[0]);
..

}

Всю программу можно запустить и получить нужный результат на Eclipse. Но когда я запускаю его в кластере Hadoop, я обнаруживаю, что эта часть не вызывается! Почему это происходит? Нужно ли что-то устанавливать в конфигурации?


person user2070763    schedule 15.04.2013    source источник
comment
Можете ли вы опубликовать больше кода/контекста для своего класса?   -  person Chris White    schedule 15.04.2013
comment
проблема решена, спасибо, что спросили @ChrisWhite   -  person user2070763    schedule 15.04.2013


Ответы (1)


Проблема решена, оказывается, я сделал две ошибки:

1) Я добавил System.out.println() в начале configure(), но он не появился. Оказывается, mapreduce не может использовать System.out.println() в фазах mapreduce, если мы хотим чтобы увидеть это, нам нужно проверить наш журнал, за подробностями спасибо Куда инфраструктура hadoop mapreduce отправляет мои операторы System.out.print()? (стандартный вывод)

2) моя настоящая ошибка связана с DistributedCache, я добавил файл и хочу прочитать его в память, чтобы открыть путь, нам нужен FileSystem.getLocal() следующим образом:

    localFiles = DistributedCache.getLocalCacheFiles(job);
    FileSystem fs = FileSystem.getLocal(job);
    FSDataInputStream inF = fs.open(localFiles[0]); 

Благодаря Hadoop: FileNotFoundExcepion при получении файла из DistributedCache

person user2070763    schedule 15.04.2013