タイトルが示すように、クライアントがファイルを hdfs に書き込むように要求した場合、HDFS または名前ノードはファイルを保存するデータノードをどのように選択しますか? hdfs は、このファイルのすべてのブロックを同じノードに格納しようとしますか、それとも大きすぎる場合は同じラック内のノードに格納しようとしますか? hdfs は、アプリケーションがファイルを特定のデータノードに好きなように保存するための API を提供していますか?
5 に答える
HDFS または名前ノードは、ファイルを保存するデータノードをどのように選択しますか?
HDFS にはBlockPlacementPolicyDefaultがあります。詳細については、API ドキュメントを確認してください。カスタム動作のためにBlockPlacementPolicyを拡張できるはずです。
hdfs は、アプリケーションがファイルを特定のデータノードに好きなように保存するための API を提供していますか?
配置動作は、特定のデータノードに固有であってはなりません。これが、HDFS が障害に対して回復力があり、スケーラブルでもある理由です。
datanode を選択するためのコードは function にありますReplicationTargetChooser.chooseTarget()
。
コメントには次のように書かれています:
レプリカの配置戦略は、ライターがデータ ノードにある場合、最初のレプリカがローカル マシンに配置され、それ以外の場合はランダム データノードに配置されます。2 番目のレプリカは、別のラックにあるデータノードに配置されます。3 番目のレプリカは、最初のレプリカと同じラックにあるデータノードに配置されます。
アプリケーションが必要なデータノードにファイルを保存するための API は提供しません。
Hadoop -385パッチを使用すると、ブロック配置ポリシーを選択して、ファイルのすべてのブロックを同じノードに配置できます (複製されたノードについても同様です)。このトピックに関するこのブログを読んでください - コメントセクションを見てください。