2020-05-06-sql-editor-for-apache-flink-sql.md 8.7 KB


title: Apache Flink SQL 用の SQL エディタ author: Romain type: post date: 2020-05-06T00:00:00+00:00 url: /blog/sql-editor-for-apache-flink-sql/ sf_thumbnail_type:

  • none sf_thumbnail_link_type:
  • link_to_post sf_detail_type:
  • none sf_page_title:
  • 1 sf_page_title_style:
  • standard sf_no_breadcrumbs:
  • 1 sf_page_title_bg:
  • none sf_page_title_text_style:
  • light sf_background_image_size:
  • cover sf_social_sharing:
  • 1 sf_related_articles:
  • 1 sf_sidebar_config:
  • left-sidebar sf_left_sidebar:
  • Sidebar-2 sf_right_sidebar:
  • Sidebar-1 sf_caption_position:
  • caption-right sf_remove_promo_bar:
  • 1 ampforwp-amp-on-off:
  • default categories:
  • Querying
  • Version 4.8

Flink SQL Editor

これは Flink 用 SQL エディタの非常に初期のバージョンです。

目標は、Flink SQL のクエリを実行する方法をデモすることです。新しい Flink SQL ゲートウェイプロジェクトを使用して、Docker コンテナ内のライブデータを持つ Flink クラスターを指すようにします。Hue は Flink のテーブルをクエリするための SQL エディタとして使用されます。

Flink SQL継続的な クエリの詳細についてはリンク先をご覧ください。

{{< youtube fKHD-fOdDY0 >}}

セットアップ

Flink 1.10 クラスターであれば動作し、デモは Ververica SQL Training をベースにしています。これは簡単なセットアップ方法 を説明しています。

git clone https://github.com/ververica/sql-training.git
cd sql-training
docker-compose up -d

そうすると http://localhost:8081 が表示されるようになります。

Flink Dashboard

ここでは SQL クライアントコンテナを起動し、ゲートウェイを内部にインストールします (ゲートウェイには FLINK_HOME が必要なので、ローカルの Flink をインストールしないようにします)が、これはローカルまたは別のコンテナで行うことができます。

docker-compose exec sql-client bash

ゲートウェイのリリース を取得します。

cd /opt
wget https://github.com/ververica/flink-sql-gateway/releases/download/v0.1-snapshot/flink-sql-gateway-0.1-SNAPSHOT-bin.zip
unzip flink-sql-gateway-0.1-SNAPSHOT-bin.zip
cd flink-sql-gateway-0.1-SNAPSHOT

echo $FLINK_HOME

続いて、別のシェルから Flink SQL の設定をゲートウェイにコピーして、デフォルトでデモのテーブルを取得するようにします。

wget https://raw.githubusercontent.com/romainr/flink-sql-gateway/master/docs/demo/sql-gateway-defaults.yaml

docker cp sql-gateway-defaults.yaml flink-sql-training_sql-client_1:/opt/flink-sql-gateway-0.1-SNAPSHOT/conf/

これでコンテナのシェルに戻り、開始することができます。

cd bin
./sql-gateway.sh --library /opt/sql-client/lib

CTRL-Z でサーバーをバックグラウンドにして、

bg

セットアップを検証するためにいくつかのコマンドを実行します。

curl localhost:8083/v1/info
> {"product_name":"Apache Flink","version":"1.10.0"}

curl -X POST localhost:8083/v1/sessions -d '{"planner":"blink","execution_type":"streaming"}'
> {"session_id":"7eea0827c249e5a8fcbe129422f049e8"}

SQL クライアントコンテナ内ではなく SQL ゲートウェイにデプロイすることも可能です。

  1. FLINK_HOME が設定された Flink のバイナリーパッケージ を持っていること

  2. $FLINK_HOME/conf/flink-conf.yaml で実際の jobmanager のアドレス jobmanager.rpc.address を更新する

  3. sql-gateway-defaults.yaml の2つのアドレスのプロパティを変更する

    server:
      # The address that the gateway binds itself.
      bind-address: 172.18.0.7
      # The address that should be used by clients to connect to the gateway.
      address: 172.18.0.7

クエリエディタ

Hue のコネクター セクションに説明しているように、Flink インタープリターを追加しています。

[notebook]

[[interpreters]]

[[[flink]]]
  name=Flink
  interface=flink
  options='{"api_url": "http://172.18.0.7:8993"}'

クライアントのコンテナにゲートウェイをセットアップしていて、ローカルホストから接続したい場合は、そのバインドIPを SQL クライアントコンテナのIPで更新する必要があります。

ゲートウェイサービスの IP は実行しているコンテナの1つです。flink-sql-training_sql-client_1 を確認してIPを取得します。

docker ps
> CONTAINER ID        IMAGE                                                COMMAND                  CREATED              STATUS              PORTS                                                NAMES
> 638574b31cd6        fhueske/flink-sql-training:1-FLINK-1.10-scala_2.11   "/docker-entrypoint.…"   About a minute ago   Up About a minute   6123/tcp, 8081/tcp                                   flink-sql-training_sql-client_1
> 59d1627c412a        wurstmeister/kafka:2.12-2.2.1                        "start-kafka.sh"         About a minute ago   Up About a minute   0.0.0.0:9092->9092/tcp                               flink-sql-training_kafka_1
> 6711c0707f1e        flink:1.10.0-scala_2.11                              "/docker-entrypoint.…"   About a minute ago   Up About a minute   6121-6123/tcp, 8081/tcp                              flink-sql-training_taskmanager_1
> 6a8149af6c1e        flink:1.10.0-scala_2.11                              "/docker-entrypoint.…"   About a minute ago   Up About a minute   6123/tcp, 0.0.0.0:8081->8081/tcp                     flink-sql-training_jobmanager_1
> 3de8275dff26        wurstmeister/zookeeper:3.4.6                         "/bin/sh -c '/usr/sb…"   About a minute ago   Up About a minute   22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp   flink-sql-training_zookeeper_1
> a28cee7627a0        mysql:8.0.19                                         "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp                                  flink-sql-training_mysql_1

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' flink-sql-training_sql-client_1
> 172.18.0.7

Flink SQL Editor

そして、ここで左側のアシストを使用してテーブルを参照し、簡単にクエリするためにドラッグ&ドロップするだけでなく、より強力なクエリを書くためのオートコンプリートを活用しています。

SELECT taxiId, isStart
FROM default_database.Rides
LIMIT 100
;

SELECT
  psgCnt,
  COUNT(*) AS cnt
FROM Rides
WHERE isInNYC(lon, lat) AND isStart
GROUP BY
  psgCnt
;

Flink のダッシュボードは通常のジョブとして SQL のクエリを表示します。

Flink Job Dashboard

今後

この最初のバージョンでは、商用環境の準備をするために数多くの将来的な繰り返し がありますが、ベースはそこに到達しています。

Apache Calcite をベースにしたSQL オートコンプリート の改善が注目されています。Hue にはより良い構文 and even ships with a default Flink SQL dialect.

Another one coming soon will be a more user friendly display of the live data in the result grid.

Any feedback or question? Feel free to comment here or on the Forum and quick start Live SQL querying!

Romain from the Hue Team