Имам 2 файла, които трябва да бъдат достъпни от клъстера hadoop. Тези два файла са съответно good.txt и bad.txt. Първо, тъй като и двата файла трябва да бъдат достъпни от различни възли, поставям тези два файла в разпределения кеш в класа на драйвера, както следва
Configuration conf = new Configuration();
DistributedCache.addCacheFile(new URI("/user/training/Rakshith/good.txt"),conf);
DistributedCache.addCacheFile(new URI("/user/training/Rakshith/bad.txt"),conf);
Job job = new Job(conf);
Сега както добрите, така и лошите файлове се поставят в разпределен кеш. Имам достъп до разпределения кеш в класа на картографа, както следва
public class LetterMapper extends Mapper<LongWritable,Text,LongWritable,Text> {
private Path[]files;
@Override
protected void setup(org.apache.hadoop.mapreduce.Mapper.Context context)
throws IOException, InterruptedException {
files=DistributedCache.getLocalCacheFiles(new Configuration(context.getConfiguration()));
}
Трябва да проверя дали дадена дума присъства в good.txt или bad.txt. Така че използвам нещо подобно
File file=new File(files[0].toString()); //to access good.txt
BufferedReader br=new BufferedReader(new FileReader(file));
StringBuider sb=new StringBuilder();
String input=null;
while((input=br.readLine())!=null){
sb.append(input);
}
input=sb.toString();
трябва да получа съдържанието на добър файл в моята входна променлива. Но не го разбирам. Пропуснал ли съм нещо??