依存関係アーカイブの指定
JavaまたはScalaアプリケーションでは、ファットJARにバンドルできない、バンドルしたくない、バンドルしたくない、バンドルしたくない、バンドルしたくない追加のJARファイルが必要になる場合があります。または、Sparkランタイム内で使用できるように、ネイティブ・コードまたは他のアセットを含めることができます。
spark-submitオプションが機能しない場合、データ・フローには、サードパーティの依存関係をバンドルするためのアプリケーションとともにZIPアーカイブ(archive.zip
)を提供するオプションがあります。ZIPアーカイブは、Dockerベースのツールを使用して作成できます。archive.zip
は、アプリケーションを実行する前にすべてのSparkノードにインストールされます。archive.zip
を正しく構築すると、Pythonライブラリがランタイムに追加され、JARファイルがSparkクラスパスに追加されます。追加されたライブラリは、1つの実行に分離されます。つまり、他の同時実行またはそれ以降の実行に影響を与えません。実行ごとにアーカイブを1つのみ指定できます。
アーカイブ内のものはすべて、データ・フロー・ランタイムと互換性がある必要があります。たとえば、データ・フローは、特定のバージョンのJavaおよびPythonを使用してOracle Linux上で実行されます。他のOS用にコンパイルされたバイナリ・コード、または他のJavaバージョン用にコンパイルされたJARファイルが原因で、実行が失敗する場合があります。データ・フローには、互換性のあるソフトウェアを使用したアーカイブの構築に役立つツールが用意されています。ただし、これらのアーカイブは通常のZipファイルであるため、必要に応じて自由に作成できます。独自のツールを使用する場合は、互換性を確保する必要があります。
依存関係アーカイブは、Sparkアプリケーションと同様に、データ・フローにロードされます。データ・フロー・アプリケーション定義には、実行時に上書きできるこのアーカイブへのリンクが含まれています。アプリケーションを実行すると、Sparkジョブが実行される前にアーカイブがダウンロードおよびインストールされます。アーカイブは実行に対してプライベートです。たとえば、異なる依存関係を使用して同じアプリケーションの2つの異なるインスタンスを同時に実行できますが、競合はありません。依存関係は実行間で永続化されないため、実行する他のSparkアプリケーションの競合バージョンは問題になりません。
データ・フロー依存関係パッケージャを使用した依存関係アーカイブの構築
依存関係アーカイブの構造
依存関係アーカイブは通常のZIPファイルです。上級ユーザーは、データ・フロー依存関係パッケージャを使用するのではなく、独自のツールを使用してアーカイブを構築することを選択できます。正しく構築された依存関係アーカイブには、次の一般的なアウトラインがあります:
python
python/lib
python/lib/python3.6/<your_library1>
python/lib/python3.6/<your_library2>
python/lib/python3.6/<...>
python/lib/python3.6/<your_libraryN>
python/lib/user
python/lib/user/<your_static_data>
java
java/<your_jar_file1>
java/<...>
java/<your_jar_fileN>
データ・フローでは、
/opt/dataflow
ディレクトリの下にアーカイブ・ファイルが抽出されます。データ・フロー依存関係パッケージャを使用して、Archive.zipファイルを検証します
ファイルをオブジェクト・ストレージにアップロードする前に、データ・フロー依存関係パッチャを使用して、archive.zip
ファイルをローカルで検証できます。
archive.zip
ファイルを含むディレクトリに移動し、シェイプに応じて次のコマンドを実行します:
docker run --platform linux/arm64 --rm -v $(pwd):/opt/dataflow --pull always -it phx.ocir.io/axmemlgtri2a/dataflow/dependency-packager-linux_arm64_v8:latest -p 3.11 --validate archive.zip
docker run --platform linux/amd64 --rm -v $(pwd):/opt/dataflow --pull always -it phx.ocir.io/axmemlgtri2a/dataflow/dependency-packager-linux_x86_64:latest -p 3.11 --validate archive.zip
Requirements.txtおよびPackages.txtファイルの例
requirements.txt
ファイルの例では、データ・フロー・アプリケーションにデータ・フローSDK for Pythonバージョン2.14.3が含まれています:-i https://pypi.org/simple
certifi==2020.4.5.1
cffi==1.14.0
configparser==4.0.2
cryptography==2.8
oci==2.14.3
pycparser==2.20
pyopenssl==19.1.0
python-dateutil==2.8.1
pytz==2020.1
six==1.15.0
requirements.txt
ファイルの例には、Pythonホイール・ファイル用のPyPIソース、Webソースおよびローカル・ソースが混在しています:-i https://pypi.org/simple
blis==0.4.1
catalogue==1.0.0
certifi==2020.4.5.1
chardet==3.0.4
cymem==2.0.3
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.2.0/en_core_web_sm-2.2.0.tar.gz#egg=en-core-web-sm
idna==2.9
importlib-metadata==1.6.0 ; python_version < '3.8'
murmurhash==1.0.2
numpy==1.18.3
plac==1.1.3
preshed==3.0.2
requests==2.23.0
spacy==2.2.4
srsly==1.0.2
thinc==7.4.0
tqdm==4.45.0
urllib3==1.25.9
wasabi==0.6.0
zipp==3.1.0
/opt/dataflow/mywheel-0.1-py3-none-any.whl
ojdbc8-18.3.jar
oraclepki-18.3.jar
osdt_cert-18.3.jar
osdt_core-18.3.jar
ucp-18.3.jar