2013-11-18 2 views
0

Мне нужно получить доступ к нескольким файлам в файловой системе hadoop, например. /user/.../data/somefile.txt Я понятия не имею, как получить доступ к этим файлам. У меня есть код, как показано ниже, но это не работает. Поэтому я пробовал такие вещи, как «hdfs: // user/....», «hdfs: // localhost: 50070/user/...» или каким-то образом использовал URI (хотя я действительно не знаю, как это работает).Доступ к файлу в файловой системе hadoop

Я был предоставлен вариант hadoop 1.2.1 для этой задачи, и я работаю с ubuntu на виртуальной машине и затмении (без подключаемого модуля hadoop). Я никогда раньше не работал с хаупом, так что было бы здорово, если бы вы могли мне помочь.

 JobConf conf = new JobConf(TotalWordCount.class); 
    conf.setJobName("wordcount"); 

    conf.setOutputKeyClass(Text.class); 
    conf.setOutputValueClass(IntWritable.class); 

    conf.setMapperClass(Map.class); 
    conf.setCombinerClass(Reduce.class); 
    conf.setReducerClass(Reduce.class); 

    conf.setInputFormat(TextInputFormat.class); 
    conf.setOutputFormat(TextOutputFormat.class); 

    FileInputFormat.setInputPaths(conf, new Path("/user/.../data/textfile.txt")); 

    FileOutputFormat.setOutputPath(conf, new Path("/user/.../output")); 

    LineProcessor.initializeStopWords(); 

    JobClient.runJob(conf); 

Выполнение кода выше, я получаю сообщение об ошибке, как это:

ERROR security.UserGroupInformation: PriviledgedActionException as:ds2013 cause:org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/user/.../data/textfile.txt 
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/user/.../data/textfile.txt 

Я также попытался что-то вроде

DistributedCache.addCacheFile((new Path("/user/.../data/textfile.txt")).toUri(), conf); 
Path[] paths = DistributedCache.getLocalCacheFiles(conf); 
Path cachePath = paths[0]; 
BufferedReader stopListReader = new BufferedReader(new FileReader(cachePath.toString())); 

Но он не может найти файл.

Exception in thread "main" java.io.FileNotFoundException: File /user/.../data/textfile.txt does not exist. 
+0

Что вы подразумеваете под «этим не работает»? Могут быть много разных условий ошибки. –

+0

ERROR security.UserGroupInformation: PriviledgedActionException as: ds2013 cause: org.apache.hadoop.mapred.InvalidInputException: Путь ввода не существует: file:/user /.../ data/textfile.txt Исключение в потоке "main" org .apache.hadoop.mapred.InvalidInputException: Путь ввода не существует: file:/user /.../ data/textfile.txt – Ben

+0

Можете ли вы вставить содержимое вашего основного сайта.xml, особенно fs.default.name имущество? –

ответ

0

Спасибо, ребята, за вашу помощь. проблема заключалась в том, что вы просто не можете запускать программу в eclipse, как я. Когда я запускаю банку с помощью терминала, он находит пути.

0

Причина: Когда вы запускаете свою работу непосредственно в затмении, на самом деле она работает как локальный режим, что означает, что приложение попытается найти файлы на вашей клиентской машине.

Решение: Для того, чтобы убедиться, что приложение может хорошо работать удаленно, необходимо расширить класс Java: Configured.java и реализует инструмент, как:

public class SimpleMapperMain extends Configured implements Tool { 
    public int run(String[] args) throws Exception { 
     //your code here 
    } 
    public static void main(String[] args) throws Exception { 
     int res = ToolRunner.run(new Configuration(), new SimpleMapperMain(),args); 
     System.exit(res); 
    } 
} 

примечание:
1. убедитесь, что ваши файлы конфигурации xml, такие как hdfs-site.xml, core-site.xml и т. Д., Включены в путь к классам, в вашем случае они должны быть помещены в src/main/resources в maven.
2. Если дело доходит до разрешения проблемы, пожалуйста, измените своего текущего пользователя на пользователя: hdfs, затем запустите приложение снова, проблема не исчезнет.

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

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