9

次のマッパーのコードは、HDFS からテキスト ファイルを読み取りますか? もしそうなら:

  1. 異なるノードの 2 つのマッパーがほぼ同時にファイルを開こうとするとどうなりますか?
  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);
4

2 に答える 2

21

これは、いくつかの修正を加えれば機能します-貼り付けたコードが切り詰められていると思います:

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();
}

複数のマッパーが同じファイルを読み取ることができますが、分散キャッシュを使用する方が理にかなっている制限があります (ファイルのブロックをホストするデータ ノードの負荷を軽減するだけでなく、より効率的になります)タスクノードよりも多くのタスクを持つジョブがある場合)

于 2013-01-29T01:38:57.427 に答える