Abhängigkeitsarchiv bereitstellen
Für Ihre Java- oder Scala-Anwendungen sind möglicherweise zusätzliche JAR-Dateien erforderlich, die Sie nicht in einem Fat JAR bündeln können oder möchten. Oder Sie möchten nativen Code oder andere Assets aufnehmen, um diese Elemente innerhalb der Spark-Laufzeit verfügbar zu machen.
Wenn die spark-submit-Optionen nicht funktionieren, hat Data Flow die Möglichkeit, ein ZIP-Archiv (archive.zip
) zusammen mit Ihrer Anwendung zum Bündeln von Drittanbieterabhängigkeiten bereitzustellen. Das ZIP-Archiv kann mit einem Docker-basierten Tool erstellt werden. Die archive.zip
wird auf allen Spark-Knoten installiert, bevor die Anwendung ausgeführt wird. Wenn Sie die archive.zip
korrekt erstellen, werden die Python-Librarys der Laufzeit hinzugefügt und die JAR-Dateien werden dem Spark-Classpath hinzugefügt. Die hinzuzufügenden Librarys sind für eine Ausführung isoliert. Das bedeutet, dass sie nicht in andere gleichzeitige Ausführungen oder spätere Ausführungen eingreifen. Pro Ausführung kann nur ein Archiv angegeben werden.
Alle Elemente im Archiv müssen mit der Datenflusslaufzeit kompatibel sein. Data Flow wird beispielsweise unter Oracle Linux mit bestimmten Versionen von Java und Python ausgeführt. Für andere Betriebssysteme oder für andere Java-Versionen kompilierte JAR-Dateien können dazu führen, dass die Ausführung nicht erfolgreich verläuft. Data Flow bietet Tools, mit denen Sie Archive mit kompatibler Software erstellen können. Allerdings handelt es sich bei diesen Archiven um gewöhnliche ZIP-Dateien, d.h. Sie können sie frei nach Ihren Wünschen erstellen. Wenn Sie Ihre eigenen Tools verwenden, sind Sie für die Kompatibilität verantwortlich.
Abhängigkeitsarchive, ähnlich wie Ihre Spark-Anwendungen, werden in Data Flow geladen. Die Datenflussanwendungsdefinition enthält einen Link zu diesem Archiv, der zur Laufzeit überschrieben werden kann. Wenn Sie Ihre Anwendung ausführen, wird das Archiv heruntergeladen und installiert, bevor der Spark-Job ausgeführt wird. Das Archiv ist privat für die Ausführung. Das heißt beispielsweise, dass Sie gleichzeitig zwei verschiedene Instanzen derselben Anwendung mit unterschiedlichen Abhängigkeiten, jedoch ohne Konflikte, ausführen können. Abhängigkeiten bleiben zwischen Ausführungen nicht bestehen. Daher gibt es keine Probleme mit widersprüchlichen Versionen für andere Spark-Anwendungen, die Sie möglicherweise ausführen.
Abhängigkeitsarchiv mit dem Data Flow Dependency Packager erstellen
Die Struktur des Abhängigkeitsarchivs
Abhängigkeitsarchive sind gewöhnliche ZIP-Dateien. Fortgeschrittene Benutzer möchten Archive möglicherweise mit eigenen Tools statt mit Data Flow Dependency Packager erstellen. Ein korrekt aufgebautes Abhängigkeitsarchiv weist die folgende allgemeine Modellstruktur auf:
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 extrahiert Archivdateien im Verzeichnis
/opt/dataflow
.Archive.zip-Datei mit dem Data Flow Dependency Packager validieren
Mit dem Data Flow Dependency Packager können Sie eine archive.zip
-Datei lokal validieren, bevor Sie die Datei in Object Storage hochladen.
Navigieren Sie zu dem Verzeichnis, das die Datei archive.zip
enthält, und führen Sie je nach Ausprägung die folgenden Befehle aus:
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
Beispiele für Requirements.txt- und Packages.txt-Dateien
requirements.txt
-Datei enthält die Datenfluss-SDK für Python-Version 2.14.3 in einer Datenflussanwendung:-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
-Datei enthält eine Mischung aus PyPI-Quellen, Webquellen und lokalen Quellen für Python Wheel-Dateien:-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