Fornecendo um Arquivo Compactado de Dependência
Seus aplicativos Java ou Scala podem precisar de arquivos JAR extras que você não pode ou não quer empacotar em um Fat JAR. Ou talvez você queira incluir código nativo ou outros ativos para disponibilizar no runtime do Spark.
Quando as opções de script spark-submit não funcionam, o serviço Data Flow tem a opção de fornecer um arquivo ZIP (archive.zip) junto com seu aplicativo para agrupar dependências de terceiros. O arquivo ZIP pode ser criado usando uma ferramenta baseada no Docker. O archive.zip é instalado em todos os nós do Spark antes de executar o aplicativo. Se você construir o archive.zip corretamente, as bibliotecas Python serão adicionadas ao runtime e os arquivos JAR serão adicionados ao classpath do Spark. As bibliotecas adicionadas são isoladas em uma Execução. Isso significa que eles não interferem em outras Execuções simultâneas ou Execuções posteriores. Apenas um arquivo compactado pode ser fornecido por Execução.
Qualquer coisa no archive deve ser compatível com o runtime do serviço Data Flow. Por exemplo, o serviço Data Flow é executado no Oracle Linux usando versões específicas do Java e Python. O código binário compilado para outros OSs ou arquivos JAR compilados para outras versões do Java pode causar falha na Execução. O serviço Data Flow fornece ferramentas para ajudar você a criar arquivos compactados com software compatível. No entanto, esses arquivos são arquivos Zip comuns, então você é livre para criá-los de qualquer maneira que quiser. Se você usar suas próprias ferramentas, será responsável por garantir a compatibilidade.
Os arquivos compactados de dependência, da mesma forma que os aplicativos Spark, são carregados no serviço Data Flow. Sua definição de Aplicativo Data Flow contém um link para esse arquivo compactado, que pode ser substituído no runtime. Quando você executa seu Aplicativo, o arquivo compactado é baixado e instalado antes da execução do job do Spark. O arquivo compactado é privado para a Execução. Isso significa, por exemplo, que você pode executar simultaneamente duas instâncias distintas do mesmo Aplicativo, com diferentes dependências, mas sem conflitos. As dependências não persistem entre Execuções; portanto, não há problemas com versões conflitantes para outros aplicativos Spark que você possa executar.
Criando um Arquivo Compactado de Dependência com o Pacote de Dependência do Serviço Data Flow
A Estrutura do Arquivo Compactado de Dependência
Arquivos compactados de dependência são arquivos ZIP comuns. Os usuários avançados podem querer criar arquivos compactados com suas próprias ferramentas, em vez de usar o Data Flow Dependency Packager. Um arquivo de dependência construído corretamente tem esta estrutura de tópicos geral:
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>
O serviço Data Flow extrai arquivos compactados no diretório
/opt/dataflow.Valide um Arquivo Archive.zip Usando o Pacote de Dependência do Serviço Data Flow
Você pode usar o Pacote de Dependência do Serviço Data Flow para validar um arquivo archive.zip localmente, antes de fazer upload do arquivo para o serviço Object Storage.
Navegue até o diretório que contém o arquivo archive.zip e execute os seguintes comandos, dependendo da 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.zipdocker 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.zipExemplo de Arquivos Requirements.txt e Packages.txt
requirements.txt inclui o serviço Data Flow SDK for Python versão 2.14.3 em um Aplicativo 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 inclui uma combinação de origens PyPI, origens web e origens locais para arquivos de roda 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