hadoop-hdfs-Balancer



Hadoop Hdfs Balancer



処理ロジック
画像

該当シーン
ディスク使用率はマシン間で不均一です。たとえば、新しいデータノードがクラスターに追加され、ディスクサイズはノードごとに異なります。



HDFSデータは常にDataNodeに均等に配置されるとは限りません。一般的な理由は、既存のクラスターに新しいデータストリームを追加することです。ブロックを配置するとき(ファイルのデータは一連のブロックとして保存されます)、namenodeは、これらのブロックを受け取るデータブロックを選択する前に、さまざまなパラメーターを考慮します。いくつかの考慮事項は次のとおりです。

1.ブロックを書き込んでいるノードと同じノードにブロックのコピーを保持します



2.クラスターがラック全体で存続できるように、異なるコピーをラックにコピーする必要があります。

3.コピーの1つは通常、ファイルが書き込まれるノードと同じラックに配置されるため、クロスラックネットワークI / Oが削減されます。

4.クラスター内のデータストリームにHDFSデータを均等に分散します。



複数の競合に関する考慮事項により、データがDataNodeに均等に配置されない場合があります。
HDFSは、データストレージの場所を分析し、クラスターノード間でデータのバランスを取り直すことができる管理者向けのツールを提供します。

イコライザーは、HDFSクラスターのディスクスペースの使用のバランスをとるツールです。
一部のデータストリームがいっぱいになったとき、または新しい空のノードがクラスターに参加したとき。このツールは、クラスター管理者がリアルタイムHDFSクラスターアプリケーションでファイルを追加および削除できるようにデプロイされています。

コマンド

bin/start-balancer.sh [-threshold ] * Example: bin/ start-balancer.sh * start the balancer with a default threshold of 10% * bin/ start-balancer.sh -threshold 5 * start the balancer with a threshold of 5% * bin/ start-balancer.sh -idleiterations 20 * start the balancer with maximum 20 consecutive idle iterations * bin/ start-balancer.sh -idleiterations -1 * run the balancer with default threshold infinitely * To stop: * bin/ stop-balancer.sh Usage: hdfs balancer [-threshold ] [-policy ] [-exclude [-f file> | <comma-separated list of hosts>]] [-include [-f file> | <comma-separated list of hosts>]] [-idleiterations ] COMMAND_OPTION Description -policy datanode (default): Cluster is balanced if each datanode is balanced. blockpool: Cluster is balanced if each block pool in each datanode is balanced. -threshold Percentage of disk capacity. This overwrites the default threshold. -exclude -f file> | <comma-separated list of hosts> Excludes the specified datanodes from being balanced by the balancer. -include -f file> | <comma-separated list of hosts> Includes only the specified datanodes to be balanced by the balancer. -idleiterations Maximum number of idle iterations before exit. This overwrites the default idleiterations(5). Runs a cluster balancing utility. An administrator can simply press Ctrl-C to stop the rebalancing process. See Balancer for more details. Note that the blockpool policy is more strict than the datanode policy. cacheadmin Usage: hdfs cacheadmin -addDirective -path -pool [-force] [-replication ] [-ttl <time-to-live>] See the HDFS Cache Administration Documentation for more information. In order to perform the balancer operation more efficiently, the recommendations are as follows: -threshold 30 The larger the setting, the sooner it ends, and priority is given to those with high DN occupancy Parameter meaning: the target parameter for judging whether the cluster is balanced, the difference between each datanode's storage usage rate and the cluster's total storage usage rate should be less than this threshold. In the online environment, when the Hadoop cluster is balancing, it is also writing and deleting data concurrently, so it may not reach the set balance parameter value. -include Contains the following DN list dfs.balance.bandwidthPerSec 300MB (the setting of our computing cluster) Parameter meaning: Set the bandwidth that the balance tool can occupy during operation. If the setting is too large, mapred may run slowly. hdfs balancer -policy datanode -threshold 30 -include -f /tmp/hdfs-blancer.txt

しきい値パラメーターは、範囲(1%、100%)のスコアです。デフォルト値は10%です。ターゲットクラスターのバランスが取れているかどうかに関係なく、クラスターにしきい値が設定されます。
各DataNodeについて、クラスターはバランスの取れたノードであり(ノードの総容量に対するノードで使用されるスペースの比率)は使用率(クラスターで使用されるスペースの比率)とは異なり、しきい値を超えません。

しきい値が小さいほど、クラスターのバランスが取れています
小さなしきい値でイコライザーを実行するのに時間がかかります
しきい値が非常に小さい場合、アプリケーションがファイルの書き込みと削除を同時に行うと、クラスターがバランスの取れた状態に達しない可能性があります
このツールは、使用率の高いDataNodeから非常に貧弱なDataNodeにブロックを移動します。
各反復で、dataNodeは移動または受信し、10Gまたは容量未満のしきい値を超えなくなります。
各反復は20分を超えません。各反復の終わりに、イコライザーは更新されたデータ要素を取得します。

<property> * <name>dfs.balance.bandwidthPerSecname> * 1048576 * Specifies the maximum bandwidth that each datanode * can utilize for the balancing purpose in term of the number of bytes * per second. * property>

このプロパティは、ブロックが実行される最大速度を決定します
*あるデータノードから別のデータノードに移動しました。デフォルト値は1MB /秒です。より高いです
*帯域幅が広いほど、クラスターがより速くバランスの取れた状態に到達できます。
*ただし、申請プロセスとの競争は激しくなります。もし
*管理者は構成内のこのプロパティの値を変更します
*ファイル、HDFSが次に再起動されたときに変更が観察されます。

start-balancer.sh -threshold 20 -policy blockpool -include -f /tmp/ip.txt

上記のコマンドは、ip.txtファイルのディスクハイとディスクローを手動で除外して、バランスがこのファイルのみを通過するようにします。さらに、複数の名前空間であるため、適切なしきい値を設定する必要があります。そのため、ブロックプールモードを選択する必要があります。
さらに、帯域幅もバランスを制限する要因であり、hdfs-site.xmlで設定されています。

<property> <name>dfs.datanode.balance.bandwidthPerSecname> <value>10485760value> property>

ただし、これを再起動する必要があります。hadoopは動的に調整されたコマンドを提供します。

hdfs dfsadmin -fs hdfs://ns1:8020 -setBalancerBandwidth 104857600 hdfs dfsadmin -fs hdfs://ns2:8020 -setBalancerBandwidth 104857600 hdfs dfsadmin -fs hdfs://ns3:8020 -setBalancerBandwidth 104857600 hdfs dfsadmin -fs hdfs://ns4:8020 -setBalancerBandwidth 104857600 hdfs dfsadmin -fs hdfs://ns5:8020 -setBalancerBandwidth 104857600

最適化

最適化1:バランサーのしきい値が高いほど、必要なバランスの量が少なくなり、DN占有率のバランスが取れていないしきい値が低いほど、必要なバランスの量が多くなり、DN占有率のバランスが取れます。

最適化2:バランサーのJavaヒープサイズを増やす

最適化3:高度な構成:hdfs-site.xml高度な構成コードセグメント(安全弁)

#Configure on both DataNode and balancer instances <property> <name>dfs.datanode.balance.max.concurrent.movesname> <value>50value> property> #Configure in the balancer instance <property> <name>dfs.balancer.moverThreadsname> <value>5000value> property> <property> <name>dfs.balancer.dispatcherThreadsname> <value>5000value> property> <property> <name>dfs.balancer.max-size-to-movename> <value>53687091200value> property>

予防

このコマンドの-tパラメーターの後に、平衡に達したHDFSのディスク使用量偏差値が続きます。マシン間のディスク使用量の偏差が10%未満の場合、HDFSクラスターはバランスの取れた状態に達していると考えられます。

Hadoop開発者は、バランサープログラムを開発する際に次の原則に従います。
1.データの再配布プロセス中に、データが失われたり、データのバックアップの数が変更されたり、各ラックのブロックの数が変更されたりしないようにする必要があります。
2.システム管理者は、1つのコマンドでデータ再配布プログラムを開始したり、データ再配布プログラムを停止したりできます。
3.ブロックが移動しているとき、ネットワーク帯域幅などの過剰なリソースを一時的に使用することはできません。
4.データ再配布プログラムの実行中、ネームノードの通常の動作に影響を与えることはできません。

その他

新しいデータノードがhdfsクラスターに参加すると、多くのデータを保持しません。したがって、マシンに割り当てられたマップタスクは、ローカルデータを読み取らない可能性が高いため、ネットワーク帯域幅の使用が増加します。一方、一部のデータノードがいっぱいになると、新しいデータブロックはいっぱいでないデータノードにのみ配置されるため、読み取りの並列処理が減少します。

このjiraは、クラスターで不均衡が発生したときにデータブロックを再配布するアプローチを見つけることを目的としています。ソリューションは、次の要件を満たす必要があります。
1.リバランスによってブロックが持つレプリカの数やブロックが存在するラックの数が減らないという意味で、データの可用性が保証されます。
2.管理者は、コマンドラインからリバランスを呼び出して中断できる必要があります。
3.リバランスによって、ネームノードがビジー状態になりすぎて着信要求を処理したり、ネットワークが飽和したりしないように、リバランスを調整する必要があります。

これが私の最初の考えのいくつかです。コメントしてください。

  1. バランスは?
    クラスター内に容量不足または容量超過のデータノードがない場合、クラスターはバランスが取れています。
    容量不足のデータノードは、その%usedspaceがavg_%used_space-threshholdよりも小さいノードです。
    容量超過データノードは、その%usedspaceがavg_%used_space + threshholdより大きいノードです。
    しきい値はユーザーが構成できます。デフォルト値は、%使用済みスペースの20%です。

  2. いつリバランスするのですか?
    再バンランスはオンデマンドで実行されます。管理者は、リバランスをトリガーするコマンドを発行します。クラスタのバランスがとれると、リバランスは自動的に停止し、管理者が中断することもできます。次のコマンドがサポートされます。
    Hadoopdfsadminバランス