ロードバランサーについて基本的な質問があります。 hbase v0.98もあるhadoop(2.3)クラスターに新しいノードを追加し終えたところです。追加し、hadoopとhbaseですべてのノードをオンラインにした後、
HbaseはHadoopリバランサーによってどのように影響を受けますか? Hadoopのリバランス後にhbaseのリバランスを明示的に試みる必要がありますか?
私のHadoopクラスターは完全にhbaseで占められています。 balancer_switch = trueを設定すると、hbaseとhadoopのバランスが自動的に再調整されますか?
Hadoopとhbaseの両方のバランスが再調整され、正常に機能することを確認するための最良の方法は何ですか?
Hadoop(HDFS)バランサーは、ブロックを1つのノードから別のノードに移動して、各データノードが同じ量のデータ(構成可能なしきい値内)を持つようにします。これにより、HBasesのデータの局所性が台無しになります。つまり、特定のリージョンが、ローカルホスト上に存在しなくなったファイルを提供している可能性があります。
HBaseのbalance_switchは、各リージョンサーバーが同じ数のリージョン(またはそれに近い)をホストするようにクラスターのバランスを取ります。これは、Hadoop(HDFS)バランサーとは別のものです。
HBaseのみを実行している場合は、Hadoop(HDFS)バランサーを実行しないことをお勧めします。これにより、特定のリージョンでデータの局所性が失われます。これにより、そのリージョンへのリクエストは、ネットワークを介して、HFileを提供しているデータノードの1つに到達する必要があります。
ただし、HBaseのデータの局所性は回復されます。圧縮が発生するたびに、すべてのブロックがそのリージョンにサービスを提供するリージョンサーバーにローカルにコピーされ、マージされます。その時点で、その領域のデータの局所性が回復します。これで、クラスターに新しいノードを追加するために本当に必要なのは、ノードを追加することだけです。 Hbaseがリージョンのリバランスを処理し、これらのリージョンが完了すると、コンパクトなデータの局所性が復元されます。
Hadoopは、デフォルトではブロックレベルのバランシングを行いません。 Hadoopで手動でバランシングを行うために使用できるツールがいくつかあります。つまり https://hadoop.Apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/CommandsManual.html#balancer 。完全に空のノードまたは新しいノードが少数で、それ以外の場合は完全なクラスターに追加した場合、HDFSのバランシングは実際には非常にコストがかかることに注意してください。私の経験では、HDFSブロックのバランシングは問題なく機能するだけです。 。バランサーを複数回実行すると、全体的なバランスを改善できます。 Hadoopに組み込まれているものよりも優れたバランス調整を行うことができるいくつかの代替実装もあります。
[ライブノード]リンクをクリックすると、HDFS NameNodeUIからブロックのバランスを調べることができます。 「使用済みブロックプール」列は、この目的に役立つ列です。さまざまなマシンで使用されているブロックの割合に大きなばらつきがある場合は、HDFSクラスターのバランスを取り直す必要がある場合があります。
balancer_switch
はregionserverのバランスにのみ影響します。 HBaseはデフォルトでクラスター内のリージョンのバランスを自動的に取りますが、hbase Shell
からいつでも手動でbalancer
を実行できます。
HBaseマスターUIのメインページの「RegionServers」セクションの「Load」という名前の列でリージョンのバランスを調べることができます。「numberOfOnlineRegions」という名前の値があります。一般に、HBaseはこれをバランスよく保つのにかなり良い仕事をします。最初にテーブルを作成したとき、デフォルトのバランシングアルゴリズムが偏った領域のセットを思い付くのを数回しか見たことがありません。とにかく、リージョンバランサーは実際にはかなり安価であり、非常に迅速に実行できます。通常、1回実行するだけで、非常にバランスの取れた状態になります。