Realtime Compute for Apache Flink の Python デプロイメントで、カスタム Python 仮想環境、サードパーティの Python パッケージ、JAR パッケージ、およびデータファイルを使用できます。 本トピックでは、これらの依存関係を Python デプロイメントで使用する方法について説明します。
概要
以下のセクションの手順に従って、Python 依存関係を使用できます。
プリインストールされた Python 環境
Flink 完全管理環境には、Python 環境がプリインストールされています。 Python のバージョンは次のとおりです。
-
Ververica Runtime (VVR) 8.0.10 以前: Python 3.7
-
VVR 8.0.11 以降: Python 3.9
Python 環境にプリインストールされているサードパーティパッケージについては、「PyFlinkジョブの開発」をご参照ください。
一部のサードパーティ Python パッケージには glibc のバージョン要件があります。 Flink 完全管理環境にプリインストールされている glibc のバージョンは次のとおりです。
X86
-
VVR 8.x 以前: glibc 2.17
-
VVR 11.x 以降: glibc 2.31
ARM
-
VVR 11.2 以前: glibc 2.17
-
VVR 11.3 以降: glibc 2.31
Glibc は上位互換性をサポートしています。 使用するサードパーティ Python パッケージで要求される glibc のバージョンは、環境内の glibc バージョンより新しくすることはできません。
カスタム Python 仮想環境の使用
VVR 4.X では、Python 3.7 の仮想環境のみ使用できます。 VVR 6.X 以降では、より新しい Python バージョンの仮想環境を使用できます。
プリインストールされた Python 環境が要件を満たさない場合は、Python 仮想環境を介してカスタム Python バージョンを使用できます。 各 Python 仮想環境は、完全な Python ランタイム環境を提供します。 仮想環境には、一連の Python 依存関係パッケージをインストールできます。次のセクションでは、Python 仮想環境を準備する方法について説明します。
-
Python 仮想環境を準備します。
-
ローカルデバイスで setup-pyflink-virtual-env.sh スクリプトを準備します。 次のコードは、スクリプトの内容を示しています。
X86
set -e # miniforge.sh スクリプトをダウンロードします。 wget "https://github.com/conda-forge/miniforge/releases/download/25.11.0-1/Miniforge3-25.11.0-1-Linux-x86_64.sh" -O "miniforge.sh" # miniforge.sh スクリプトに実行権限を追加します。 chmod +x miniforge.sh # miniforge をインストールします。 ./miniforge.sh -b source /root/miniforge3/bin/activate # Python 仮想環境を作成します。 mamba create -n venv python=3.10 -y eval "$(mamba shell hook --shell bash)" # Python 仮想環境をアクティベートします。 mamba activate venv # PyFlink 依存関係をインストールします。 pip install "ververica-flink==11.7.0" # VVR 11.5 以前のバージョンには専用の PyPI パッケージがないため、代わりにオープンソースの PyFlink をインストールします。 # pip install "apache-flink==1.20.3" "setuptools<81" # パッケージサイズを削減するために、不要な JAR ファイルを削除します。 find /root/miniforge3/envs/venv/lib/python3.10/site-packages/pyflink/ -name *.jar | xargs rm # Conda Python 仮想環境をデアクティベートします。 mamba deactivate # 準備した Conda Python 仮想環境をパッケージ化します。 cd /root/miniforge3/envs/ && zip -r /root/venv.zip venvARM
set -e # miniforge.sh スクリプトをダウンロードします。 wget "https://github.com/conda-forge/miniforge/releases/download/25.11.0-1/Miniforge3-25.11.0-1-Linux-aarch64.sh" -O "miniforge.sh" # miniforge.sh スクリプトに実行権限を追加します。 chmod +x miniforge.sh # miniforge をインストールします。 ./miniforge.sh -b source /root/miniforge3/bin/activate # Python 仮想環境を作成します。 mamba create -n venv python=3.10 -y eval "$(mamba shell hook --shell bash)" # Python 仮想環境をアクティベートします。 mamba activate venv # PyFlink 依存関係をインストールします。 yum install -y java-11-openjdk-devel export JAVA_HOME=/usr/lib/jvm/java-11 wget "https://raw.githubusercontent.com/apache/flink/release-1.20/flink-python/dev/dev-requirements.txt" -O dev-requirements.txt pip install -r dev-requirements.txt pip install "ververica-flink==11.7.0" # VVR 11.5 以前のバージョンには専用の PyPI パッケージがないため、代わりにオープンソースの PyFlink をインストールします。 # pip install "apache-flink==1.20.3" "setuptools<81" # パッケージサイズを削減するために、不要な JAR ファイルを削除します。 find /root/miniforge3/envs/venv/lib/python3.10/site-packages/pyflink/ -name *.jar | xargs rm # Conda Python 仮想環境をデアクティベートします。 mamba deactivate # 準備した Conda Python 仮想環境をパッケージ化します。 cd /root/miniforge3/envs && zip -r /root/venv.zip venv説明このトピックの例では、デプロイメントで VVR 11.7 を使用し、Python 3.10 の仮想環境で実行します。 異なる VVR バージョンを使用したり、別の Python バージョンの仮想環境をインストールしたりする場合は、次のパラメーターを変更する必要があります。
-
mamba create :これを目的の Python バージョンに変更します。
-
pip install :
-
VVR 11.6 以降: ververica-flink をインストールし、バージョンをデプロイメントの VVR バージョンに合わせて変更します。
-
VVR 11.5 以前: apache-flink をインストールし、バージョンをデプロイメントの VVR バージョンに対応する Flink バージョンに変更します。 詳細については、「ストレージ管理」をご参照ください。
-
-
-
ローカルデバイスで build.sh スクリプトを準備します。 次のコードは、スクリプトの内容を示しています。
#!/bin/bash set -e -x yum install -y zip wget cd /root/ bash /build/setup-pyflink-virtual-env.sh mv venv.zip /build/ -
CLI で、次のコマンドを実行して Python 仮想環境をインストールします。
X86
docker run -it --rm -v $PWD:/build -w /build quay.io/pypa/manylinux_2_28_x86_64 bash ./build.shARM
docker run -it --rm -v $PWD:/build -w /build quay.io/pypa/manylinux_2_28_aarch64 bash ./build.shコマンドを実行すると、venv.zip という名前のファイルが生成されます。 この例では、Python 3.10 の仮想環境を使用します。
上記のスクリプトを変更して、必要なサードパーティ Python パッケージを仮想環境にインストールすることもできます。
-
-
Python デプロイメントで Python 仮想環境を使用します。
-
[Fully Managed Flink] タブで、管理するワークスペースを見つけ、[Actions] 列の [Console] をクリックします。
-
左側メニューで、[アーティファクト] をクリックします。 [アーティファクト] ページで、[Upload Artifact] をクリックします。 表示されるダイアログボックスで、venv.zip パッケージを選択します。
-
ページで、目的のジョブの名前をクリックします。
-
[設定] タブで、[基本] セクションの右上隅にある [編集] をクリックし、[Python アーカイブ] ドロップダウンリストから
venv.zipパッケージを選択します。デプロイメントが Python ユーザー定義関数 (UDF) を使用する SQL デプロイメントの場合は、[パラメーター] セクションの右上隅にある [編集] をクリックし、[その他の設定] フィールドに次の設定を追加します。
python.archives: oss://.../venv.zip -
[パラメーター] セクションで、デプロイメントの VVR バージョンに基づいて、指定された Python 仮想環境をインストールするためのパスに関する設定を [その他の設定] フィールドに追加します。
-
VVR 6.X 以降
python.executable: venv.zip/venv/bin/python python.client.executable: venv.zip/venv/bin/python -
VVR 6.X より前のエンジンバージョン
python.executable: venv.zip/venv/bin/python
-
サードパーティ Python パッケージの使用
次の2つのシナリオで、サードパーティ Python パッケージの使用方法を説明します。
-
直接インポートできるサードパーティ Python パッケージの使用
サードパーティ Python パッケージが Zip Safe パッケージである場合、次の手順で、インストールせずに Python デプロイメントでパッケージを直接使用できます。
-
直接インポートできるサードパーティ Python パッケージをダウンロードします。
-
Web ブラウザーで PyPI にアクセスします。
-
検索ボックスに、apache-flink 1.20.3 などのサードパーティ Python パッケージの名前を入力します。
-
検索結果で、使用したいパッケージの名前をクリックします。
-
表示されるページの左側メニューで、[Download files] をクリックします。
-
名前に cp39-cp39-manylinux1 が含まれるパッケージの名前をクリックして、パッケージをダウンロードします。
-
-
[Fully Managed Flink] タブで、ワークスペースを見つけ、[Actions] 列の [Console] をクリックします。
-
左側のナビゲーションペインで、[アーティファクト] をクリックします。 [アーティファクト] ページで、[Upload Artifact] をクリックします。 表示されるダイアログボックスで、必要なサードパーティ Python パッケージを選択します。
-
左側のナビゲーションペインで、 をクリックします。 [デプロイメント] ページで、 をクリックします。 ダイアログボックスで、[Python ライブラリ] に、アップロードしたサードパーティ Python パッケージを選択します。
-
[Save] をクリックします。
-
-
コンパイルが必要なサードパーティ Python パッケージの使用
サードパーティ Python パッケージが次の条件を満たす場合、使用する前にパッケージをコンパイルする必要があります。その条件とは、パッケージが tar.gz 形式の圧縮パッケージまたは別の場所からダウンロードしたソースパッケージであり、かつ圧縮パッケージのルートディレクトリに setup.py ファイルが存在することです。 Python デプロイメントでサードパーティ Python パッケージを呼び出す前に、Flink と互換性のある環境でそのパッケージをコンパイルする必要があります。
quay.io/pypa/manylinux_2_28_x86_64 イメージの Python 3.9 を使用して、サードパーティ Python パッケージをコンパイルすることを推奨します。 このイメージで生成したパッケージは、ほとんどの Linux オペレーティングシステムと互換性があります。 イメージの詳細については、manylinux をご参照ください。
説明Python 3.9 は /opt/python/cp39-cp39/bin/python3 ディレクトリにインストールされます。
次の例では、サードパーティ Python パッケージ opencv-python-headless をコンパイルして使用する方法を説明します。
-
サードパーティ Python パッケージをコンパイルします。
-
ローカルデバイスで requirements.txt ファイルを準備します。 次のコードは、ファイルの内容を示しています。
opencv-python-headless numpy<2 -
ローカルデバイスで build.sh スクリプトを準備します。 次のコードは、スクリプトの内容を示しています。
#!/bin/bash set -e -x yum install -y zip #PYBIN=/opt/python/cp37-cp37m/bin #PYBIN=/opt/python/cp38-cp38/bin PYBIN=/opt/python/cp39-cp39/bin #PYBIN=/opt/python/cp310-cp310/bin #PYBIN=/opt/python/cp311-cp311/bin "${PYBIN}/pip" install --target __pypackages__ -r requirements.txt cd __pypackages__ && zip -r deps.zip . && mv deps.zip ../ && cd .. rm -rf __pypackages__ -
CLI で、次のコマンドを実行します。
X86
docker run -it --rm -v $PWD:/build -w /build quay.io/pypa/manylinux_2_28_x86_64 bash ./build.shARM
docker run -it --rm -v $PWD:/build -w /build quay.io/pypa/manylinux_2_28_aarch64 bash ./build.shコマンドを実行すると、deps.zip という名前のファイルが生成されます。 このファイルは、コンパイル済みのサードパーティ Python パッケージです。
requirements.txt ファイルの内容を変更して、他の必要なサードパーティ Python パッケージをインストールすることもできます。 さらに、requirements.txt ファイルには複数の Python 依存関係を指定できます。
-
-
Python デプロイメントでサードパーティ Python パッケージ deps.zip を使用します。
-
ワークスペースを見つけ、[Actions] 列の [Console] をクリックします。
-
左側のナビゲーションペインで、[アーティファクト] をクリックします。 [アーティファクト] ページで、[Upload Artifact] をクリックします。 ダイアログボックスで、deps.zip を選択します。
-
ページで、デプロイメントをクリックします。 [設定] タブで、[基本] セクションの右上隅にある [編集] をクリックし、[Python ライブラリ] ドロップダウンリストから deps.zip パッケージを選択します。
-
[Save] をクリックします。
-
JAR パッケージの使用
Python デプロイメントでコネクタや Java UDF などの Java クラスを使用する場合は、次の操作で、コネクタまたは Java UDF の JAR パッケージを指定できます。
-
[Fully Managed Flink] タブで、管理するワークスペースを見つけ、[Actions] 列の [Console] をクリックします。
-
左側のナビゲーションペインで、[アーティファクト] をクリックします。 [アーティファクト] ページで、[Upload Artifact] をクリックします。 表示されるダイアログボックスで、使用する JAR パッケージを選択します。
-
[デプロイメント] ページで、目的のデプロイメントの名前をクリックします。 [設定] タブで、[基本] セクションの右上隅にある [編集] をクリックし、[追加の依存関係] ドロップダウンリストから必要な JAR パッケージを選択します。
-
[設定] タブで、[パラメーター] セクションの右上隅にある [編集] をクリックし、[その他の設定] フィールドに次の設定を追加します。
たとえば、ドラフトが jar1.jar と jar2.jar という名前の2つの JAR パッケージに依存している場合は、次の設定を追加します。
pipeline.classpaths: 'file:///flink/usrlib/jar1.jar;file:///flink/usrlib/jar2.jar' -
[Save] をクリックします。
組み込みコネクタ、データフォーマット、カタログの使用
VVR 11.2 以降のバージョンのみをサポートします。
Python プログラムで組み込みのコネクタ、データフォーマット、カタログを使用するには、次の手順を実行してください。
-
Python デプロイメントの詳細ページで、[パラメーター] セクションの [その他の設定] フィールドに設定を追加します。
組み込みコネクタを使用するためのパラメーターを追加します。 次の設定では、Kafka コネクタと SLS コネクタを指定します。 具体的なコネクタ名については、「サポートされているコネクタ」のドキュメントをご参照ください。
pipeline.used-builtin-connectors: kafka;sls組み込みデータフォーマットのパラメーターを追加します。 次の設定では、avro と parquet フォーマットを指定します。 具体的なデータフォーマット名については、「データフォーマット」をご参照ください。
pipeline.used-builtin-formats: avro;parquet組み込みカタログのパラメーターを追加します。 次の設定では、hive-2.3.6 と paimon カタログを指定します。 具体的なカタログについては、「カタログ」をご参照ください。
pipeline.used-builtin-catalogs: hive-2.3.6;paimon -
[Save] をクリックします。
データファイルの使用
Flink 完全管理では、データファイルをアップロードして Python デプロイメントをデバッグすることはできません。
次のシナリオで、データファイルの使用方法を説明します。
-
[Python アーカイブ] ドロップダウンリストからパッケージを選択
多数のデータファイルがある場合は、データファイルを ZIP ファイルにパッケージ化し、次の操作で Python デプロイメントで使用できます。
-
ワークスペースを見つけ、[Actions] 列の [Console] をクリックします。
-
左側のナビゲーションペインで、[アーティファクト] をクリックします。 [アーティファクト] ページで、[Upload Artifact] をクリックします。 表示されるダイアログボックスで、目的のデータファイルの ZIP パッケージを選択します。
-
ページで、デプロイメントの名前をクリックします。 [設定] タブで、[基本] セクションの右上隅にある [編集] をクリックし、[Python アーカイブ] ドロップダウンリストから必要な ZIP パッケージを選択します。
-
Python UDF で、次のコマンドを実行してデータファイルにアクセスします。 この例では、データファイルを含むパッケージの名前は mydata.zip です。
def map(): with open("mydata.zip/mydata/data.txt") as f: ...
-
[追加の依存関係] ドロップダウンリストからデータファイルを選択
少数のデータファイルがある場合は、次の操作で、Python デプロイメントでこれらのファイルにアクセスできます。
-
ワークスペースを見つけ、[Actions] 列の [Console] をクリックします。
-
左側メニューで、[アーティファクト] をクリックします。 [アーティファクト] ページで、[Upload Artifact] をクリックします。 表示されるダイアログボックスで、目的のデータファイルを選択します。
-
ページで、目的のデプロイメントの名前をクリックします。 [設定] タブで、[基本] セクションの右上隅にある [編集] をクリックし、[追加の依存関係] ドロップダウンリストから必要なデータファイルを選択します。
-
Python UDF で、次のコマンドを実行してデータファイルにアクセスします。 この例では、データファイルの名前は data.txt です。
def map(): with open("/flink/usrlib/data.txt") as f: ...
関連ドキュメント
-
Python API ドラフトの開発方法の詳細については、「PyFlinkジョブの開発」をご参照ください。
-
Realtime Compute for Apache Flink の Python デプロイメントの開発方法の詳細については、「PyFlinkジョブ」をご参照ください。
-
Flink 完全管理は、SQL ドラフトと DataStream ドラフトをサポートしています。 SQL ドラフトと DataStream ドラフトの開発方法の詳細については、「ジョブ開発の概要」および「JARジョブの開発」をご参照ください。