Suministro de un archivo de dependencia
Es posible que las aplicaciones de Java o Scala necesiten archivos JAR adicionales que no pueda o no desee agrupar en un Fat JAR. O puede que desee incluir código nativo u otros activos para que estén disponibles en el tiempo de ejecución de Spark.
Cuando las opciones de spark-submit no funcionan, Data Flow tiene la opción de proporcionar un archivo ZIP (archive.zip
) junto con la aplicación para agrupar dependencias de terceros. El archivo ZIP se puede crear con una herramienta basada en Docker. archive.zip
se instala en todos los nodos de Spark antes de ejecutar la aplicación. Si crea archive.zip
correctamente, las bibliotecas de Python se agregan al tiempo de ejecución y los archivos JAR se agregan a la classpath de Spark. Las bibliotecas agregadas están aisladas en una ejecución. Esto significa que no interfieren con otras ejecuciones simultáneas o posteriores. Solo se puede proporcionar un archivo por ejecución.
Cualquier elemento del archivo debe ser compatible con el tiempo de ejecución de Data Flow. Por ejemplo, Data Flow se ejecuta en Oracle Linux con versiones concretas de Java y Python. El código binario compilado para otros sistemas operativos, o archivos JAR compilados para otras versiones de Java, puede provocar que la ejecución falle. Data Flow proporciona herramientas para ayudarle a crear archivos con software compatible. Sin embargo, estos archivos son archivos Zip normales, por lo que puede crearlos como desee. Si utiliza sus propias herramientas, es responsable de garantizar la compatibilidad.
Los archivos de dependencias, al igual que las aplicaciones de Spark, se cargan en Data Flow. La definición de aplicación de Data Flow contiene un enlace a este archivo, que se puede sustituir en tiempo real. Al ejecutar la aplicación, el archivo se descarga e instala antes de ejecutar el trabajo de Spark. El archivo es privado de la ejecución. Esto significa, por ejemplo, que puede ejecutar simultáneamente dos instancias diferentes de la misma aplicación, con diferentes dependencias, pero sin conflictos. Las dependencias no persisten entre ejecuciones, por lo que no hay ningún problema con las versiones en conflicto para otras aplicaciones de Spark que pueda ejecutar.
Creación de un archivo de dependencias mediante el empaquetador de dependencias de Data Flow
Estructura del archivo de dependencias
Los archivos de dependencias son archivos ZIP normales. Los usuarios avanzados pueden querer crear archivos con sus propias herramientas en lugar de utilizar el empaquetador de dependencias de Data Flow. Un archivo de dependencia construido correctamente tiene este esquema general:
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 extrae archivos de almacenamiento del directorio
/opt/dataflow
.Valide un archivo Archive.zip mediante el empaquetador de dependencias de Data Flow
Puede utilizar el empaquetador de dependencias de Data Flow para validar un archivo archive.zip
localmente antes de cargar el archivo en Object Storage.
Vaya al directorio que contiene el archivo archive.zip
y ejecute los siguientes comandos, según la unidad:
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
Ejemplo de los archivos Requirements.txt y Packages.txt
requirements.txt
incluye el SDK para Python versión 2.14.3 de Data Flow en una aplicación de 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
incluye una combinación de orígenes de PyPI, orígenes web y orígenes locales para los archivos de paquetes de 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