org.apache.hadoop.hdfs.server.namenode.NotReplicatedYetException
org.apache.hadoop.hdfs.server.namenode.NotReplicatedYetException: Not replicated yet:/nnThroughputBenchmark/addblock/AddblockBenchDir0/AddblockBench0 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1350) at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:400) at org.apache.hadoop.hdfs.NNThroughputBenchmark.addBlocks(NNThroughputBenchmark.java:1228) at org.apache.hadoop.hdfs.NNThroughputBenchmark.testAddBlcok(NNThroughputBenchmark.java:1216) at org.apache.hadoop.hdfs.NNThroughputBenchmark.main(NNThroughputBenchmark.java:1247) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68) at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:141) at org.apache.hadoop.test.AllTestDriver.main(AllTestDriver.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.util.RunJar.main(RunJar.java:165) at org.apache.hadoop.mapred.JobShell.run(JobShell.java:54) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) at org.apache.hadoop.mapred.JobShell.main(JobShell.java:68)
NotReplicatedYetExceptionこの例外は、ファイルの書き込み中にデータブロックgetAdditionalBlock()を新たに割り当てたときにcheckFileProgress(pendingFile,false)を呼び出してファイルの最後から2番目のデータブロックのコピー数がシステムセキュリティコピー数の要件に達しているかどうかをチェックし、満たさない場合はNotReplicatedYetExceptionを捨てます.
checkFileProgress(pendingFile,true)はまた、ファイルの終了時にcompleteFileInternal()を呼び出し、ファイルのすべてのデータブロックをチェックし、ファイルにデータブロックのコピー数がセキュリティ要件より少ない場合はCompleteFileStatusに戻る.STILL_WAITING状態;
次に、主にファイル作成プロセスで新たに割り当てられたデータ・ブロックの流れを分析します.
1,Namenodeはネーミングスペースに新しいINodeノードを作成します.
2、新しいデータブロックのDN位置locationを選択してClientに戻り、ファイルの最後から2番目のデータブロックのコピー数がセキュリティ要件に達しているかどうかを確認します.そうしないと、NotReplicatedYetExceptionを捨てます(もちろん、最初のデータブロックはこのような検査をスキップします).
3,Clientはpipelineを書きます;
4,pipeline上のDNのPacketResponderスレッドは次のレベルのackを待っていて、1つのデータブロックを正常に受け入れた後finalizeBlock、addBlockを呼び出してvolumeMapに追加して、その後offerService()でNNにこのデータブロックが保存されていることを報告します;
5,NN処理blockReceived();
6、新しいデータブロックがあればステップ2に進む.
テスト時のコードクリップは次のとおりです.
NotReplicatedYetExceptionこの例外は、ファイルの書き込み中にデータブロックgetAdditionalBlock()を新たに割り当てたときにcheckFileProgress(pendingFile,false)を呼び出してファイルの最後から2番目のデータブロックのコピー数がシステムセキュリティコピー数の要件に達しているかどうかをチェックし、満たさない場合はNotReplicatedYetExceptionを捨てます.
checkFileProgress(pendingFile,true)はまた、ファイルの終了時にcompleteFileInternal()を呼び出し、ファイルのすべてのデータブロックをチェックし、ファイルにデータブロックのコピー数がセキュリティ要件より少ない場合はCompleteFileStatusに戻る.STILL_WAITING状態;
次に、主にファイル作成プロセスで新たに割り当てられたデータ・ブロックの流れを分析します.
1,Namenodeはネーミングスペースに新しいINodeノードを作成します.
2、新しいデータブロックのDN位置locationを選択してClientに戻り、ファイルの最後から2番目のデータブロックのコピー数がセキュリティ要件に達しているかどうかを確認します.そうしないと、NotReplicatedYetExceptionを捨てます(もちろん、最初のデータブロックはこのような検査をスキップします).
3,Clientはpipelineを書きます;
4,pipeline上のDNのPacketResponderスレッドは次のレベルのackを待っていて、1つのデータブロックを正常に受け入れた後finalizeBlock、addBlockを呼び出してvolumeMapに追加して、その後offerService()でNNにこのデータブロックが保存されていることを報告します;
5,NN処理blockReceived();
6、新しいデータブロックがあればステップ2に進む.
テスト時のコードクリップは次のとおりです.
NameNode.format(conf);
Namenode.createNamenode();
for(int idx=0; idx < dnNum; idx++) {
datanodes[idx] = new Datanode();
datanodes[idx].register();
datanodes[idx].sendHeartbeat();
}
nameNode.setSafeMode(FSConstants.SafeModeAction.SAFEMODE_LEAVE);
nameNode.create(fileName, FsPermission.getDefault(),
clientName, true, repl, BLOCK_SIZE);
LocatedBlock loc = nameNode.addBlock(fileName, clientName);
datanodes[jdx].addBlock(loc.getBlock());
nameNode.blockReceived(
datanodes[jdx].dnRegistration,
new Block[] {loc.getBlock()},
new String[] {""});
nameNode.complete(fileName, clientName);