Spécification d'une archive de dépendances
Vos applications Java ou Scala peuvent avoir besoin de fichiers JAR supplémentaires que vous ne pouvez pas ou ne voulez pas regrouper dans un fichier Fat JAR. Vous pouvez également inclure du code natif ou d'autres ressources à mettre à disposition dans l'exécution Spark.
Lorsque les options spark-submit ne fonctionnent pas, Data Flow a la possibilité de fournir une archive ZIP (archive.zip
) avec votre application pour regrouper les dépendances tierces. L'archive ZIP peut être créée à l'aide d'un outil basé sur Docker. archive.zip
est installé sur tous les noeuds Spark avant d'exécuter l'application. Si vous construisez correctement archive.zip
, les bibliothèques Python sont ajoutées à l'exécution et les fichiers JAR sont ajoutés à la variable d'environnement CLpath Spark. Les bibliothèques ajoutées sont isolées sur une seule exécution. Cela signifie qu'ils n'interfèrent pas avec d'autres exécutions simultanées ou ultérieures. Une seule archive par exécution peut être fournie.
Tout élément de l'archive doit être compatible avec l'exécution Data Flow. Par exemple, Data Flow est exécuté sur Oracle Linux à l'aide de versions particulières de Java et de Python. Le code binaire compilé pour d'autres systèmes d'exploitation ou les fichiers JAR compilés pour d'autres versions de Java peuvent entraîner l'échec de l'exécution. Data Flow fournit des outils pour vous aider à créer des archives avec un logiciel compatible. Cependant, ces archives étant des fichiers ZIP ordinaires, vous êtes libre de les créer comme vous le souhaitez. Si vous utilisez vos propres outils, vous avez la responsabilité d'assurer la compatibilité.
Les archives de dépendances, de même que vos applications Spark, sont chargées vers Data Flow. Votre définition d'application Data Flow contient un lien vers cette archive, qui peut être remplacée lors de l'exécution. Lorsque vous exécutez votre application, l'archive est téléchargée et installée avant l'exécution du travail Spark. L'archive est privée pour l'exécution. Cela signifie, par exemple, que vous pouvez exécuter simultanément deux instances différentes de la même application, avec des dépendances différentes, mais sans conflit. Les dépendances ne sont pas persistantes entre les exécutions, il n'y a donc aucun problème de versions conflictuelles pour les autres applications Spark que vous pouvez exécuter.
Création d'une archive de dépendances à l'aide de l'utilitaire de package de dépendances Data Flow
Structure de l'archive de dépendances
Les archives de dépendances sont des fichiers ZIP ordinaires. Les utilisateurs avancés peuvent créer des archives à l'aide de leurs propres outils plutôt que d'utiliser l'utilitaire de package de dépendances Data Flow. Une archive de dépendances correctement construite présente l'outline générale suivante :
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>
Data Flow extrait les fichiers d'archive sous le répertoire
/opt/dataflow
.Validation d'un fichier Archive.zip à l'aide de l'utilitaire de package de dépendances Data Flow
Vous pouvez l'utiliser pour valider un fichier archive.zip
localement avant de le télécharger vers Object Storage.
Accédez au répertoire contenant le fichier archive.zip
et exécutez les commandes suivantes, en fonction de la forme :
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
Exemples de fichiers Requirements.txt et Packages.txt
requirements.txt
inclut le kit SDK pour Python version 2.14.3 de Data Flow dans une application Data Flow :-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
comprend un mélange de sources PyPI, de sources Web et de sources locales pour les fichiers de wheel Python :-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