【Flink】Apache Flink ~ 環境構築編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/03/01/235100

の続き。

今回は、Apache Flinkの開発環境を整える

目次

【1】サポートOS
【2】Windows での環境構築について
 失敗談1:.bat での実行
 失敗談2:Cygwin での実行
【3】環境構築手順
 1)JDKのインストール
 2)Apache Flinkのインストール
 3)ローカルクラスタの開始と停止
 補足1:WindowsからWSLのUbuntuのFlink Web UIにアクセスする
 補足2:Flink with Docker Compose

【1】サポートOS

* Linux
* Mac OS X
* Windows ... 「【2】Windows での環境構築について」以降を参照

https://nightlies.apache.org/flink/flink-docs-stable/docs/try-flink/local_installation/

より抜粋
~~~~~~~~~~~~~
Flink runs on all UNIX-like environments,
 i.e. Linux, Mac OS X, and Cygwin (for Windows).
You need to have Java 11 installed. 
~~~~~~~~~~~~~

【2】Windows での環境構築について

Windowsでの環境構築では、
以下のサイトのようにWSLや
Virtual boxで Linux を立ち上げてやった方が良さそう

https://zenn.dev/notrogue/articles/ee83f23167cc3b

失敗談1:.bat での実行

少なくとも最新 Apache Flink (今回の場合「v1.16.1」)では
この Windows 用のバッチはない。
 => シェルはあるので、無理やり「Git Bash」で実行したところ、
  以下のエラーで実行できなかった。

http://mogile.web.fc2.com/flink/flink-docs-release-1.5/start/flink_on_windows.html

より抜粋
~~~~~~
Flinkジョブマネージャーを実行するために、Windows Batch ファイル (.bat)
~~~~~~

Git Bashでむりやり「./bin/start-cluster.sh」を実行した際のエラー

$ ./bin/start-cluster.sh
Starting cluster.
/c/flink-1.16.1/bin/config.sh: line 20: /dev/fd/62: No such file or directory
[ERROR] Flink distribution jar not found in /c/flink-1.16.1/lib.
Starting standalonesession daemon on host LAPTOP-R760QSF6.
/c/flink-1.16.1/bin/config.sh: line 20: /dev/fd/62: No such file or directory
[ERROR] Flink distribution jar not found in /c/flink-1.16.1/lib.
Starting taskexecutor daemon on host LAPTOP-R760QSF6.

失敗談2:Cygwin での実行

以下「試した環境」で環境構築し、「./bin/start-cluster.sh」した後、
「localhost:8081」へブラウザ表示してもWeb UIが表示されなかった。
<flink>/log 配下のログを確認したところ、以下「エラー内容」が表示。
 => なお、以下のサイトである環境変数 PATH は既に設定してあり
  それが原因ではない。他には特に情報がない、、、

https://stackoverflow.com/questions/64284082/error-could-not-create-the-java-virtual-machine-installation-of-flink-on-window

試した環境

* OS:Windows11
* Cygwin:v3.4.6-1(cygcheck -c cygwinで確認)
* Java:Openjdk11.28 (windows-x64)
* Apache Flink:flink-1.16.1

エラー内容

<flink>/log 配下のログより抜粋
~~~~~~~~~~~
Improperly specified VM option 'MaxMetaspaceSize=268435456
'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
~~~~~~~~~~~

https://flink.apache.org/downloads/

【3】環境構築手順

WSLを使って構築する
 => 他にも Docker や Kubernetes でも構築できる
 => Docker は、以下の公式サイトの通りやれば、
  Web UIの表示までは簡単にできた(重かったけど)

Docker
https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/standalone/docker/
Kubernetes
https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/standalone/kubernetes/

0)設定環境

* OS:Windows11 WSL (Ubuntu 22.04.1 LTS) ... ※
* Java:Openjdk11.0.18
* Apache Flink:flink-1.16.1

※ WSL 環境

* 以下の関連記事を参照のこと。
 => 今回では、飛ばす

https://dk521123.hatenablog.com/entry/2021/11/03/003836

1)JDKのインストール

# 確認
java --version
# Javaが入っていなかった場合、以下を行う

sudo apt update
sudo apt install default-jdk

java --version
openjdk 11.0.18 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

2)Apache Flinkのインストール

公式サイトのダウンロード一覧を確認して
欲しい対象バージョンのURLを調べる

https://flink.apache.org/downloads/

# Apache Flinkのダウンロード(今回は「Apache Flink 1.16.1」)
curl -OL https://dlcdn.apache.org/flink/flink-1.16.1/flink-1.16.1-bin-scala_2.12.tgz

# ダウンロードしたtarファイル 解凍する
tar -xvf flink-1.16.1-bin-scala_2.12.tgz

#  確認
ls
# flink-1.16.1  flink-1.16.1-bin-scala_2.12.tgz があるはず

3)ローカルクラスタの開始と停止

cd flink-1.16.1

# ローカルクラスタの開始
./bin/start-cluster.sh

# 確認1:flinkのプロセスが存在しているか確認
# => なんか返ってくればOK
ps aux | grep flink

# 確認2:Web UIのレスポンスが返ってくるか確認
# => HTMLっぽいの返ってくればOK
curl http://localhost:8081

# ローカルクラスタの停止
./bin/stop-cluster.sh

https://zenn.dev/notrogue/articles/ee83f23167cc3b

に載っている通りにやればできる

コマンド例

# 設定ファイルの修正
vi conf/flink-conf.yaml
~~~~~
# 修正前
# rest.bind-address: localhost
# 修正後
rest.bind-address: 0.0.0.0
~~~~~

# ローカルクラスタの開始
./bin/start-cluster.sh

# Windowsのブラウザから以下のサイトにアクセスする
#  => Web UI が表示されたらOK

http://localhost:8081/

# ローカルクラスタの停止
./bin/stop-cluster.sh
* 以下の公式サイトを参照。

https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/standalone/docker/#flink-with-docker-compose
compose.yaml

# docker compose up -d で実行
version: "2.2"
services:
  jobmanager:
    image: flink:latest
    ports:
      - "8081:8081"
    command: standalone-job --job-classname com.job.ClassName [--job-id <job id>] [--fromSavepoint /path/to/savepoint [--allowNonRestoredState]] [job arguments]
    volumes:
      - /host/path/to/job/artifacts:/opt/flink/usrlib
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        parallelism.default: 2        

  taskmanager:
    image: flink:latest
    depends_on:
      - jobmanager
    command: taskmanager
    scale: 1
    volumes:
      - /host/path/to/job/artifacts:/opt/flink/usrlib
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 2
        parallelism.default: 2

参考文献

https://zenn.dev/notrogue/articles/ee83f23167cc3b

関連記事

Apache Flink ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/03/01/235100
Apache Flink ~ 環境構築編 / Kubernetes
https://dk521123.hatenablog.com/entry/2023/05/09/235256
Apache Flink ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/29/000000
Apache Flink ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/07/23/161621
Apache Flink ~ 引数の扱い / ParameterTool ~
https://dk521123.hatenablog.com/entry/2023/08/01/004207
Apache Flink ~ Accumulator ~
https://dk521123.hatenablog.com/entry/2024/07/16/231408
Flink + PostgreSQL を docker compose で構築する
https://dk521123.hatenablog.com/entry/2023/07/28/220039
Windows 上で WSLコマンドを使って Linux 環境を構築
https://dk521123.hatenablog.com/entry/2021/11/03/003836
LinuxJDK を設定する
https://dk521123.hatenablog.com/entry/2017/08/01/234900
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331