Чтение текстового файла из HDFS строка за строкой в mapper
является ли следующий код для картографов, считывающих текстовый файл из HDFS правильно? И если это так:
- что произойдет, если два картографа в разных узлах попытаются открыть файл почти одновременно?
- разве нет необходимости закрывать
InputStreamReader
? Если да, то как это сделать, не закрывая файловую систему?
мой код:
Path pt=new Path("hdfs://pathTofile");
FileSystem fs = FileSystem.get(context.getConfiguration());
BufferedReader br=new BufferedReader(new InputStreamReader(fs.open(pt)));
String line;
line=br.readLine();
while (line != null){
System.out.println(line);
1 ответов
Это будет работать с некоторыми поправками-я предполагаю, что код, который вы вставили, просто усечен:
Path pt=new Path("hdfs://pathTofile");
FileSystem fs = FileSystem.get(context.getConfiguration());
BufferedReader br=new BufferedReader(new InputStreamReader(fs.open(pt)));
try {
String line;
line=br.readLine();
while (line != null){
System.out.println(line);
// be sure to read the next line otherwise you'll get an infinite loop
line = br.readLine();
}
} finally {
// you should close out the BufferedReader
br.close();
}
вы можете иметь более одного картографа, читающего один и тот же файл, но есть предел, при котором имеет смысл использовать распределенный кэш (не только снижение нагрузки на узлы данных, на которых размещаются блоки для файла, но и будет более эффективным, если у вас есть задание с большим количеством задач, чем у вас есть узлы задач)