Я попытался запустить программу 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());
Я думаю, что часть 'hdfs: // master: 54310' вообще не нужна. Тем не менее, это не объясняет фантомный путь. – blackSmith
@blackSmith: ошибка все еще conitnues. Он показывает исключение, не найденное в файле. Я использую multinode hasoop cluster btw – re3el
, ваш путь '/ usr/local/hadoop/input/normal_small', кажется, указывает на локальный файл. Файл должен быть в HDFS для кэширования по узлам. – blackSmith