1台のマシンでHDFSクライアントを使用してHDSFクラスタから分散読み取りを行うことは可能ですか?Map/Reduceを使用しないHDFS分散読み取り
私は3つのデータノード(DN1、DN2、DN3)からなるクラスタで実験を行っています。次に、DN1にあるクライアントプログラムから10個の独立したファイルから10回の同時読み取りを実行し、DN1からのデータの読み取りのみを行っているように見えます。他のデータノード(DN2、DN3)はゼロアクティビティ(デバッグログから判断)を示していました。
すべてのファイルのブロックが3つのデータノードすべてにわたって複製されていることを確認しました。したがって、DN1をシャットダウンすると、DN2(DN2のみ)からデータが読み込まれます。
データの読み込み量が増えても問題ありませんでした(2GBから30GBまで試しました)。
大きなファイルを複数読み込んで少量のデータ(数KB)を抽出する必要があるため、より多くのサービスを設定する必要があるためmap/reduceを使用しないでください。各分割タスクの出力をHDFSに戻します。むしろ、結果をデータノードからクライアントプログラムに直接戻すようにするとよいでしょう。私は(JDK7)このように、読み出し/書き込みデータのSequenceFile
使用してい
は:
//Run in thread pool on multiple files simultaneously
List<String> result = new ArrayList<>();
LongWritable key = new LongWritable();
Text value = new Text();
try(SequenceFile.Reader reader = new SequenceFile.Reader(conf,
SequenceFile.Reader.file(filePath)){
reader.next(key);
if(key.get() == ID_I_AM_LOOKING_FOR){
reader.getCurrentValue(value);
result.add(value.toString());
}
}
return result; //results from multiple workers are merged later
すべてのヘルプは大歓迎します。ありがとう!
ありがとうございました。それはそれを説明する!プロキシのヒントありがとう。 – rodion
Hadoopはどのノードがどのラックにあるかをどのように知っていますか? - http://hadoop.apache.org/common/docs/current/cluster_setup.html#Hadoop+Rack+Awareness –
"angg"とは何ですか? –