2014-11-04 3 views
1

Я попытался запустить программу hadoop, используя новые api распределенного кеша. Я застрял с приведенными ниже сообщениями об ошибках.Проблемы с использованием новых api из кеша распространения

14/11/04 10:54:36 WARN fs.FileUtil: Command 'ln -s /tmp/hadoop-hduser/mapred/local/1415078671812/normal_small /home/yogi/Desktop/normal_small' failed 1 with: ln: failed to create symbolic link ‘/home/yogi/Desktop/normal_small’: Permission denied 

14/11/04 10:54:36 WARN mapred.LocalDistributedCacheManager: Failed to create symlink: /tmp/hadoop-hduser/mapred/local/1415078671812/normal_small <- /home/yogi/Desktop/normal_small 

java.io.FileNotFoundException: hdfs:/master:54310/usr/local/hadoop/input/normal_small (No such file or directory) 

Я никогда не упоминал ничего о/home/yogi/Desktop/normal_small в своем коде. Не могу понять, откуда он пытается получить доступ к этому файлу.

Также, как я должен указать путь входного файла в классе драйвера для решения проблемы, которая не найдена?

Ниже приведены мои картографа и класс водителя сниппеты:

Mapper:

BufferedReader in = null; 
    FileReader fr = null; 
    private List<String> list = new ArrayList<String>(); 


    @Override 
    protected void setup(Context context) 
      throws IOException, InterruptedException { 
     Configuration conf = context.getConfiguration(); 
     URI[] cacheFiles = context.getCacheFiles(); 


     try { 
      fr = new FileReader(cacheFiles[0].toString()); 
      in = new BufferedReader(fr); 
      String str; 
      while ((str = in.readLine()) != null) { 
       list.add(str); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      in.close(); 
      fr.close(); 
     } 

    } 


public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { 


    FileOutputStream fos = new FileOutputStream("output"); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 
    oos.writeObject(list); // write MenuArray to ObjectOutputStream 


    BufferedReader br=new BufferedReader(new FileReader("output")); 


     String line=br.readLine(); 
     ......... 
} 

Driver:

Job job = Job.getInstance(getConf()); 
job.setJobName("wordcount"); 
job.setJarByClass(driver.class);   
job.addCacheFile(new Path("hdfs://master:54310/usr/local/hadoop/input/normal_small").toUri()); 
+0

Я думаю, что часть 'hdfs: // master: 54310' вообще не нужна. Тем не менее, это не объясняет фантомный путь. – blackSmith

+0

@blackSmith: ошибка все еще conitnues. Он показывает исключение, не найденное в файле. Я использую multinode hasoop cluster btw – re3el

+0

, ваш путь '/ usr/local/hadoop/input/normal_small', кажется, указывает на локальный файл. Файл должен быть в HDFS для кэширования по узлам. – blackSmith

ответ

0

При добавлении файлов в распределенной кэш-памяти, она будет создавать временный каталог. Поэтому измените права собственности на этот каталог на текущего пользователя.

Смежные вопросы