3

私は 5 ノードの HBase クラスターを持っており、主にシーケンシャル データをフェッチする入力要求があります。

ストレージを最適化するために、負荷の高いリージョンで手動のリージョン分割を実行しましたが、リージョンを分割するためあまり最適化されませんが、ほとんどが同じリージョン サーバー上にあります。

この方法で領域分割を制御するにはどうすればよいですか

r-1(k1 to k2) on server s1,
r-2(k2 to k3) on server s2,
r-3(k3 to k4) on server s3,
r-4(k4 to k5) on server s4,
r-5(k5 to k6) on server s5,
r-6(k6 to k7) on server s1,

つまり、分割後、同じサーバーの負荷を制御するために、連続するリージョンが同じサーバーに移動することはありません。

4

1 に答える 1

0

サーバーとは、RegionServer を意味すると想定しています。リージョンにはリージョン サーバーがランダムに割り当てられるため、クラスターが十分に大きい場合、このような状況は発生しません (またはまれにしか発生しません)。アイデアは、これについて気にする必要はないということです。また、リージョンサーバーはデータのゲートウェイにすぎないことも理解してください。実際のデータの取得は HDFS に依存しており、データの取得元は HDFS によって決定されます。

さらに、連続するリージョンが同じ RS によって処理される場合でも、マルチスレッドを使用してデータをより高速に取得できるはずです。HBase は、知る限り、領域ごとに個別のスレッドを内部的に実行しています。通常、負荷が大きくなりすぎることはありません。これにより、実際に過剰な負荷がかかっていることがわかりましたか? 負荷の原因を特定するためにプロファイリングを行いましたか?

したがって、実際にはこれを行う必要はありませんが、特殊なケースでは、HBaseAdmin.moveメソッドを使用してこれを実現できます。を使用してテーブルのすべての領域を通過するコードを記述しHTable.getRegionLocations()、開始キーに従って領域を並べ替え、手動で ( using HBaseAdmin.move()) 連続するすべての領域が別々の領域サーバーにあることを確認できます。しかし、これが実際に問題であるとは強く思えません。このアプローチを採用する前に、これを確認することをお勧めします。

于 2012-06-19T10:29:52.253 に答える