2

リージョン数および/またはリージョン サイズ (storeFile サイズの合計) によって、テーブルの regionServers 間でリージョンのバランスを取ることができる Hbase 用のバランサー ツールを作成しようとしています。領域のサイズまたは関連情報を返す Hbase API クラスが見つかりませんでした。org.apache.hadoop.hbase.client.HTable や HBaseAdmin など、他のテーブル/リージョン情報を取得するために使用できるいくつかのクラスを既に確認しました。

これを実装できる別の方法は、fileSystem 内のディレクトリのサイズを返す Hadoop クラスの 1 つを使用することです。たとえば、org.apache.hadoop.fs.FileSystem は特定の HDFS パスの下にあるファイルを一覧表示します。

助言がありますか ?

4

2 に答える 2

7

私はこれを使用してリージョンの管理された分割を行いますが、それを利用して自分で負荷分散を行うことができます。また、MR ジョブが均等に分散されるように、(特定のテーブルの) リージョンをノード間で均等に分散するように負荷を分散します。

おそらく、以下のコード スニペットは役に立ちますか?

final HBaseAdmin admin = new HBaseAdmin(conf);
final ClusterStatus clusterStatus = admin.getClusterStatus();

for (ServerName serverName : clusterStatus.getServers()) {
  final HServerLoad serverLoad = clusterStatus.getLoad(serverName);

  for (Map.Entry<byte[], HServerLoad.RegionLoad> entry : serverLoad.getRegionsLoad().entrySet()) {
    final String region = Bytes.toString(entry.getKey());
    final HServerLoad.RegionLoad regionLoad = entry.getValue();
    long storeFileSize = regionLoad.getStorefileSizeMB();
    // other useful thing in regionLoad if you like
  }
}
于 2013-01-29T17:58:24.643 に答える
0

デフォルトのLoad Balancerの何が問題になっていますか?

ウィキから:

バランサーは、クラスター上のリージョンを再配布するためにマスターで実行される定期的な操作です。これは 300000 (5 分) を介して構成されhbase.balancer.period、デフォルトは 300000 です。

本当に自分でやりたい場合は、Hadoop APIと、より具体的にはFileStatusクラスを実際に使用できます。このクラスは、ファイルのクライアント側の情報を表すインターフェイスとして機能します。

于 2013-01-29T08:01:21.187 に答える