9

タイトルが示すように、クライアントがファイルを hdfs に書き込むように要求した場合、HDFS または名前ノードはファイルを保存するデータノードをどのように選択しますか? hdfs は、このファイルのすべてのブロックを同じノードに格納しようとしますか、それとも大きすぎる場合は同じラック内のノードに格納しようとしますか? hdfs は、アプリケーションがファイルを特定のデータノードに好きなように保存するための API を提供していますか?

4

5 に答える 5

12

HDFS または名前ノードは、ファイルを保存するデータノードをどのように選択しますか?

HDFS にはBlockPlacementPolicyDefaultがあります。詳細については、API ドキュメントを確認してください。カスタム動作のためにBlockPlacementPolicyを拡張できるはずです。

hdfs は、アプリケーションがファイルを特定のデータノードに好きなように保存するための API を提供していますか?

配置動作は、特定のデータノードに固有であってはなりません。これが、HDFS が障害に対して回復力があり、スケーラブルでもある理由です。

于 2012-10-30T01:02:15.797 に答える
8

datanode を選択するためのコードは function にありますReplicationTargetChooser.chooseTarget()

コメントには次のように書かれています:

レプリカの配置戦略は、ライターがデータ ノードにある場合、最初のレプリカがローカル マシンに配置され、それ以外の場合はランダム データノードに配置されます。2 番目のレプリカは、別のラックにあるデータノードに配置されます。3 番目のレプリカは、最初のレプリカと同じラックにあるデータノードに配置されます。

アプリケーションが必要なデータノードにファイルを保存するための API は提供しません。

于 2012-10-30T04:43:31.103 に答える
3

Hadoop -385パッチを使用すると、ブロック配置ポリシーを選択して、ファイルのすべてのブロックを同じノードに配置できます (複製されたノードについても同様です)。このトピックに関するこのブログを読んでください - コメントセクションを見てください。

于 2013-03-01T21:24:54.247 に答える