1

にボリュームの場所を追加して、Hadoop 疑似分散ノードに新しいボリュームを追加しようとしていdfs.name.dirますhdfs-site.xml。この場所にロック ファイルが表示されますが、試してみると、ファイルをロードすると (ハイブを使用する場合) これらの場所はほとんど使用されません (ロック ファイルといくつかのサブフォルダーが表示されますが、Hadoop は明らかにそれらにアクセスできます)。メイン ボリュームの容量が不足しそうになると、次の例外が発生します。

Failed with exception java.io.IOException: File /tmp/hive-ubuntu/hive_2011-02-24_15-39-15_997_1889807000233475717/-ext-10000/test.csv could only be replicated to 0 nodes, instead of 1
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1417)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:643)

新しいボリュームを Hadoop に追加する方法についての指針はありますか? EC2を使用しているFWIW im。

4

2 に答える 2

1

新しいディスク/容量をデータ ノードに追加する場合、Hadoop は、ディスクが公平に負荷分散されることを保証しません (例: より多くの空き容量があるドライブに、より多くのブロックを配置しません)。これを解決した最善の方法は、複製係数を増やすことです (例: 2 から 3 に)。

hadoop fs -setrep 3 -R /<path>

名前ノードの「複製されたブロックの下」レポートを見てください。これが 0 に達したらすぐに、複製係数を減らします (例: 3 から 2 へ)。これにより、システムからレプリカがランダムに削除され、ローカル ノードのバランスが調整されます。

hadoop fs -setrep 2 -R /<path>

100% バランスが取れているわけではありませんが、以前よりもはるかに良い形になるはずです。これは、Hadoop wiki である程度カバーされています。疑似分散で実行していて、他にデータ ノードがない場合、バランサー スクリプトは役に立ちません。

http://wiki.apache.org/hadoop/FAQ#If_I_add_new_DataNodes_to_the_cluster_will_HDFS_move_the_blocks_to_the_newly_added_nodes_in_order_to_balance_disk_space_utilization_between_the_nodes.3F

于 2011-02-24T17:36:42.133 に答える
1

FAQによると、できることがいくつかあります。

  1. HDFS のファイルを手動で新しい名前にコピーし、古いファイルを削除してから、新しいファイルの名前を元の名前に変更します。
  2. レプリケーション係数を一時的に増やし、ノード間でブロックのバランスが取れたら元に戻します。
  3. 完全なノードを削除し、そのブロックが他のノードに複製されるのを待ってから、元に戻します。フル ノードをオンラインに戻してもフル ノードがまだフルであるため、これはあまり役に立ちません。
  4. ヘッド ノードでリバランサー スクリプトを実行します。

最初に #4 を実行してから、#2 を実行してみます。

于 2011-02-24T17:43:17.150 に答える