2

特定のファイルブロックを格納するためにHadoopクラスター内のデータノードを明示的に定義するスクリプトまたは.xmlファイルのようなものを作成したいと思います。例:4つのスレーブノードと1つのマスターノード(hadoopクラスターには合計5つのノード)があるとします。file01(サイズ= 120 MB)とfile02(サイズ= 160MB)の2つのファイルがあります。デフォルトのブロックサイズ= 64MB

ここで、file01の2つのブロックの1つをスレーブノード1に格納し、もう1つをスレーブノード2に格納します。同様に、スレーブノード1にあるfile02の3つのブロックの1つ、スレーブノード3にある2番目、スレーブノード4にある3番目のブロック。だから、私の質問はどうすればこれを行うことができますか?

実際には1つの方法があります:ファイルを保存するたびにconf/slavesファイルに変更を加えます。しかし、私はこれをしたくないので、これを行うための別の解決策がありますか?私の主張を明確にしたいと思います。あなたの親切な応答を待っています..!!!

4

2 に答える 2

4

ここで求めていることを実現する方法はありません。名前ノードは、ラック構成、複製係数、およびノー​​ドの可用性に基づいてブロックをデータノードに複製するため、2つの特定のデータノードでブロックを取得できたとしても、それらのノードのうち、名前ノードがダウンすると、名前ノードはブロックを別のノードに複製します。

また、要件はレプリケーション係数を1と想定しているため、データの冗長性は得られません(データノードを失った場合は悪いことです)。

クラスタを均等に分散させたい場合は、namenodeにブロック割り当てを管理させ、バランサーを定期的に使用させます

于 2012-05-30T10:32:04.693 に答える
1

NameNodeは、ブロックの配置を決定するための最終的な権限です。このアルゴリズムをプラグ可能にするための要件についてはJiraがあります: https
: //issues.apache.org/jira/browse/HDFS-385しかし、残念ながら、0.21バージョンであり、本番環境ではありません(ただし、動作はまったく悪くありません)。 。
研究状態にある場合はアルゴリズムを0.21にプラグインし、0.23が本番環境になるのを待つか、今必要な場合はコードを0.20にダウングレードすることをお勧めします。

于 2012-05-31T06:48:22.807 に答える