まず、これは厳しい問題です。ここにスプライスマシン(オープンソース)で我々のデザインは、それが助けてくれることを願っています...
(1)これは、スキーマの作成のための単一のエントリポイントです。
(2)zookeeperでスキーマ初期化フラグが見つからない場合は、リージョンサーバーから呼び出して、マスター(Create Specific InitTableなど)を呼び出します。
(3)MasterObserverはpreCreateTableをオーバーライドし、そこにスキーマを作成するスレッドをブロックする(つまり、リージョンサーバーからの他のリクエストをブロックする)。ディクショナリが初期化される(スキーマが作成される)まで、JDBC/ODBCポートを必要とせず、作成されたテーブルに対してリージョンサーバーを使用できるようにしたいと考えました。
(4)作成が終了したら、MasterObserverに動物園の動物園に初期化フラグを書き込ませます。それはすぐにサーバをバウンス時に発生する可能性が部分的に作成する場合などを扱うので、これは非常に重要です
コード例:
MasterObserverコードスニペット
@Override
public void preCreateTable(ObserverContext<MasterCoprocessorEnvironment> ctx, HTableDescriptor desc, HRegionInfo[] regions) throws IOException {
SpliceLogUtils.info(LOG, "preCreateTable %s", Bytes.toString(desc.getTableName().getName()));
if (Bytes.equals(desc.getTableName().getName(), INIT_TABLE)) {
switch(manager.getState()){
case NOT_STARTED:
boot();
case BOOTING_ENGINE:
case BOOTING_GENERAL_SERVICES:
case BOOTING_SERVER:
throw new PleaseHoldException("Please Hold - Starting");
case RUNNING:
throw new DoNotRetryIOException("Success");
case STARTUP_FAILED:
case SHUTTING_DOWN:
case SHUTDOWN:
throw new IllegalStateException("Startup failed");
}
}
}
をチェックアウトしてお気軽にRegionLifecycleObserverとSpliceMasterObserverをgithubアカウントで使用します。
https://github.com/splicemachine/spliceengine
幸運。
'' 'master.HMaster:Master has initialization completed'''というログが現れるまで、hbaseログの最後の100行をチェックするスクリプトはどうでしょうか? –