Чтение текстового файла из HDFS строка за строкой в mapper

является ли следующий код для картографов, считывающих текстовый файл из HDFS правильно? И если это так:

  1. что произойдет, если два картографа в разных узлах попытаются открыть файл почти одновременно?
  2. разве нет необходимости закрывать 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();
}

вы можете иметь более одного картографа, читающего один и тот же файл, но есть предел, при котором имеет смысл использовать распределенный кэш (не только снижение нагрузки на узлы данных, на которых размещаются блоки для файла, но и будет более эффективным, если у вас есть задание с большим количеством задач, чем у вас есть узлы задач)