Fornire un archivio delle dipendenze
Le applicazioni Java o Scala potrebbero richiedere file JAR aggiuntivi che non è possibile o non si desidera raggruppare in un file JAR grasso. In alternativa, potresti voler includere codice nativo o altri asset da rendere disponibili all'interno del runtime Spark.
Quando le opzioni di sottomissione automatica non funzionano, Data Flow ha la possibilità di fornire un archivio ZIP (archive.zip
) insieme all'applicazione per raggruppare le dipendenze di terze parti. L'archivio ZIP può essere creato utilizzando uno strumento basato su Docker. Il file archive.zip
viene installato su tutti i nodi Spark prima di eseguire l'applicazione. Se si costruisce correttamente archive.zip
, le librerie Python vengono aggiunte al runtime e i file JAR vengono aggiunti al classpath Spark. Le librerie aggiunte sono isolate in una sola esecuzione. Ciò significa che non interferiscono con altre esecuzioni concorrenti o successive. È possibile fornire un solo archivio per esecuzione.
Qualsiasi elemento nell'archivio deve essere compatibile con il runtime del flusso di dati. Ad esempio, Data Flow viene eseguito su Oracle Linux utilizzando versioni specifiche di Java e Python. Il codice binario compilato per altri sistemi operativi o i file JAR compilati per altre versioni Java potrebbero causare l'esecuzione non riuscita. Data Flow fornisce strumenti utili per creare archivi con software compatibile. Tuttavia, questi archivi sono file Zip ordinari, quindi sei libero di crearli in qualsiasi modo tu voglia. Se utilizzi i tuoi strumenti, sei responsabile di garantire la compatibilità.
Gli archivi delle dipendenze, in modo simile alle applicazioni Spark, vengono caricati in Data Flow. La definizione dell'applicazione Flusso dati contiene un collegamento a questo archivio, che può essere sostituito in runtime. Quando si esegue l'applicazione, l'archivio viene scaricato e installato prima dell'esecuzione del job Spark. L'archivio è privato dell'esecuzione. Ciò significa, ad esempio, che è possibile eseguire contemporaneamente due istanze diverse della stessa applicazione, con dipendenze diverse, ma senza conflitti. Le dipendenze non persistono tra le esecuzioni, pertanto non si verificano problemi con versioni in conflitto per altre applicazioni Spark che è possibile eseguire.
Creazione di un archivio di dipendenze mediante Data Flow Dependency Packager
La struttura dell'archivio delle dipendenze
Gli archivi delle dipendenze sono file ZIP ordinari. Gli utenti avanzati potrebbero voler creare archivi con i propri strumenti anziché utilizzare Data Flow Dependency Packager. Un archivio di dipendenze costruito correttamente presenta i seguenti profili generali:
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 estrae i file di archivio nella directory
/opt/dataflow
.Convalidare un file Archive.zip utilizzando Data Flow Dependency Packager
È possibile utilizzare Data Flow Dependency Packager per convalidare un file archive.zip
a livello locale, prima di caricare il file nello storage degli oggetti.
Passare alla directory che contiene il file archive.zip
ed eseguire i comandi riportati di seguito, a seconda della forma.
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
File Requirements.txt e Packages.txt di esempio
requirements.txt
include l'SDK SDK for Python versione 2.14.3 di Data Flow in un'applicazione 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
include una combinazione di origini PyPI, origini Web e origini locali per i file wheel di 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