prestocatalogダイナミックロード

2445 ワード

最近、k 8 sにprestoを導入しようとしましたが、prestoのcatalogの変更が発生した場合(追加、削除、変更)、ミラーを再パッケージし、スクロールアップグレードするしかありません.理想的な方法は、prestoのcatalogは動的に削除することができ、prestoバージョンがアップグレードされたときにのみミラー化されてリリースされる.
現在、会社catalogには主にhive、mysql、kuduの3つのカテゴリがあります.hiveとkuduのcatalogはほとんど変更がないのでmysqlコネクタの変更要件を考慮するだけです.
presto catalogのダイナミックロードを実現するには、「押す」と「引く」の2つの簡単な方法があります.
「プッシュ」:つまりprestoserverインスタンスはcatalog変更のインタフェースを暴露し、クライアントからcatalog変更の要求を送信し、prestoserverはcatalog変更要求を受信し、自身のcatalogメタデータを更新する.ここで注意すべきは、クライアントがcatalog変更要求をすべてのpresto server(coordinatorおよびworker)に送信する必要があることである.
「引く」:presto serverはタイマーを起動し、一定時間ごとに最新のcatalogを引き出し、自身のcatalogメタデータを更新する.
「押す」という方法の利点はcatalog更新のリアルタイム性が高く、変更されたコードが多いことである.「引く」という方法はちょうど「押す」という方法とは逆です.こちらは後者の方式を採用しています.
更新ポリシーは、10分おきに最新のcatalog情報を取得し、既存のcatalogと比較してcatalogを更新することです.
現在、catalogのデータを提供するインタフェースが必要です(会社のデータプラットフォームがcatalogを維持しています.これもなぜ「引く」という方法を採用しているのか).インタフェースのサンプルコードは以下の通りです.
注意:デバッグを容易にするために、パスワードは暗号化されていません.
@Controller
@RequestMapping("/v1")
public class CatalogController {

    private String c_split = "\1";
    private String f_split = "\2";
    
    @ResponseBody
    @RequestMapping(value= "catalog",method = RequestMethod.GET,produces="application/json;charset=UTF-8")
    public String getResponse() {
        return catalogs();
    }
    public static String catalogs(){
        StringBuilder sb = new StringBuilder();
        sb.append("m_mysql1").append(f_split)
                .append("jdbc:mysql://127.0.0.1:3306?zeroDateTimeBehavior=convertToNull").append(f_split)
                .append("root").append(f_split).append("123456").append(c_split)

                .append("m_mysql2").append(f_split)
                .append("jdbc:mysql://127.0.0.1:3306?zeroDateTimeBehavior=convertToNull").append(f_split)
                .append("root").append(f_split).append("123456")
        ;
        return sb.toString();
    }
    
}

Prestoのバージョンは0.223で、対応するバージョンのprestoソースコードをダウンロードします.修正するコードgitアドレス:https://github.com/woloqun/presto_catalogs/blob/master/StaticCatalogStore.java
、StaticCatalogStoreを置き換える.JAva、presto-mainパッケージを再パッケージし、コマンドは次のとおりです.
mvn clean package -DskipTests -pl presto-main -Dair.check.skip-all=true -Dmaven.javadoc.skip=true

コンパイル後、presto/lib/presto-main-0.223を置き換える.JAr、再起動すればいい