Funcionalidade Spark-Submit no Serviço Data Flow
Saiba como usar o serviço Data Flow com o script Spark-submit.
Compatibilidade de Script Spark-Submit
Você pode usar opções compatíveis com o script spark-submit para executar seus aplicativos usando o serviço Data Flow.
Spark-submit é um comando padrão do setor para executar aplicativos em clusters do Spark. O serviço Data Flow suporta as seguintes opções compatíveis com script spark:
--conf
--files
--py-files
--jars
--class
--driver-java-options
--packages
main-application.jar
oumain-application.py
- argumentos para
main-application
. Os argumentos especificados para o método principal da sua classe principal (se houver).
A opção --files
simplifica sua hierarquia de arquivos, de modo que todos os arquivos são colocados no mesmo nível no diretório de trabalho atual. Para manter a hierarquia de arquivos, use archive.zip
ou --py-files
com um módulo de dependência JAR, ZIP ou EGG.
--packages
é usada para incluir qualquer outra dependência fornecendo uma lista delimitada por vírgulas de coordenadas do Maven. Por exemplo,
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.2
Todas as dependências transitivas são tratadas ao usar este comando. Com a opção
--packages
, cada pod de driver da Execução precisa fazer download de dependências dinamicamente, o que depende da estabilidade da rede e do acesso ao Maven Central ou a outros repositórios remotos. Use o Pacote de Dependência do Serviço Data Flow para gerar um arquivo compactado de dependência para produção.Para todas as opções de script spark-submit no serviço Data Flow, o URI deve iniciar oci://...
. Não há suporte para URIs que começam com local://...
ou hdfs://...
. Use os nomes de domínio totalmente qualificados (FQDN) no URI. Carregar todos os arquivos, incluindo main-application
, para o Oracle Cloud Infrastructure Object Storage.
Criar um Aplicativo Spark-Submit Data Flow explica como criar um aplicativo na Console usando o script spark-submit. Você também pode usar o script spark-submit com um SDK Java ou pela CLI. Se você estiver usando a CLI, não precisará criar um Aplicativo do serviço Data Flow para executar seu aplicativo Spark com opções compatíveis com o script spark-submit no serviço Data Flow. Isso será útil se você já tiver um comando spark-submit em operação em outro ambiente. Quando você segue a sintaxe do comando run submit
, um Aplicativo é criado, se ainda não existir um no URI main-application
.
Instalando a CLI Pública com o Comando de envio de execução
Estas etapas são necessárias para instalar uma CLI pública com o comando run submit
para uso com o Serviço Data Flow:
Usando o Script Spark-Submit no Serviço Data Flow
Você pode usar o comando da CLI spark-submit e convertê-lo em um comando da CLI compatível no serviço Data Flow.
run submit
. Se você já tiver um aplicativo Spark ativo em qualquer cluster, você estará familiarizado com a sintaxe spark-submit. Por exemplo:
spark-submit --master spark://<IP-address>:port \
--deploy-mode cluster \
--conf spark.sql.crossJoin.enabled=true \
--files oci://file1.json \
--class org.apache.spark.examples.SparkPi \
--jars oci://file2.jar <path_to>/main_application_with-dependencies.jar 1000
oci data-flow run submit \
--compartment-id <compartment-id> \
--execute "--conf spark.sql.crossJoin.enabled=true
--files oci://<bucket-name>@<namespace>/path/to/file1.json
--jars oci://<bucket-name>@<namespace>/path/to/file2.jar
oci://<bucket-name>@<namespace>/path_to_main_application_with-dependencies.jar 1000"
- Faça upload de todos os arquivos, incluindo o aplicativo principal, no serviço Object Storage.
- Substitua os URIs existentes pelo URI
oci://...
correspondente. -
Remova os parâmetros de script spark-submit não suportados ou reservados. Por exemplo,
--master
e--deploy-mode
são reservados para o serviço Data Flow e um usuário não precisa preenchê-los. -
Adicione o parâmetro
--execute
e especifique uma string de comando compatível com o script spark-submit. Para criar a string--execute
, mantenha os parâmetros de script spark-submit suportados, e main-application e seus argumentos, em sequência. Coloque-os em uma string entre aspas (aspas simples ou duplas). - Substitua
spark submit
pelo prefixo do comando padrão do Oracle Cloud Infrastructure,oci data-flow run submit
. - Adicione o argumento obrigatório e os pares de parâmetros do Oracle Cloud Infrastructure para
--profile
,--auth security_token
e--compartment-id
.
Executar Exemplos de Envio
Alguns exemplos do comando submit no serviço Data Flow.
Exemplos de Oci-cli
Exemplos de run submit
usando oci-cli
no serviço Data Flow.
oci --profile oci-cli --auth security_token data-flow run submit \
--compartment-id <compartment-id> \
--execute "--conf spark.sql.crossJoin.enabled=true
--class org.apache.spark.examples.SparkPi
oci://<bucket-name>@<tenancy-name>/spark-examples_2.11-2.3.1-SNAPSHOT-jar-with-dependencies.jar 10"
--jars
, --files
e pyfiles
:oci --profile oci-cli --auth security_token data-flow run submit \
--compartment-id <compartment-id> \
--execute "--jars oci://<bucket-name>@<tenancy-name>/a.jar
--files \"oci://<bucket-name>@<tenancy-name>/b.json\"
--py-files oci://<bucket-name>@<tenancy-name>/c.py
--conf spark.sql.crossJoin.enabled=true
--class org.apache.spark.examples.SparkPi
oci://<bucket-name>@<tenancy-name>/spark-examples_2.11-2.3.1-SNAPSHOT-jar-with-dependencies.jar 10"
archiveUri
, --jars
, --files
e pyfiles
:oci --profile oci-cli --auth security_token data-flow run submit \
--compartment-id <compartment-id> \
--archive-uri "oci://<bucket-name>@<tenancy-name>/mmlspark_original.zip" \
--execute "--jars local:///opt/dataflow/java/mmlspark_2.11-0.18.1.jar
--files \"local:///opt/dataflow/java/mmlspark_2.11-0.18.1.jar\"
--py-files local:///opt/dataflow/java/mmlspark_2.11-0.18.1.jar
--conf spark.sql.crossJoin.enabled=true
--class org.apache.spark.examples.SparkPi
oci://<bucket-name>@<tenancy-name>/spark-examples_2.11-2.3.1-SNAPSHOT-jar-with-dependencies.jar 10"
jars
, files
e pyfiles
:oci --profile oci-cli --auth security_token data-flow run submit \
--compartment-id <compartment-id> \
--archive-uri "oci://<bucket-name>@<tenancy-name>/mmlspark_original.zip" \
--execute "--jars oci://<bucket-name>@<tenancy-name>/fake.jar
--conf spark.sql.crossJoin.enabled=true
--class org.apache.spark.examples.SparkPi
oci://<bucket-name>@<tenancy-name>/spark-examples_2.11-2.3.1-SNAPSHOT-jar-with-dependencies.jar 10"
#result
{'opc-request-id': '<opc-request-id>', 'code': 'InvalidParameter',
'message': 'Invalid OCI Object Storage uri. The object was not found or you are not authorized to access it.
{ResultCode: OBJECTSTORAGE_URI_INVALID,
Parameters: [oci://<bucket-name>@<tenancy-name>/fake.jar]}', 'status': 400}
Para ativar a Autenticação do Controlador de Recursos, adicione a propriedade Spark no arquivo conf usando o Spark submit e adicione a seguinte configuração no método de execução:
--execute "--conf dataflow.auth=resource_principal --conf other-spark-property=other-value"
Exemplo de Oci-curl
Um exemplo de run submit
usando oci-curl
no serviço Data Flow.
oci-curl <IP-Address>:443 POST /Users/<user-name>/workspace/sss/dependency_test/spark-submit-test.json
/latest/runs --insecure --noproxy <IP-Address>
{
"execute": "--jars local:///opt/dataflow/java/mmlspark_2.11-0.18.1.jar
--files \"local:///opt/spark/examples/jars/spark-examples_2.11-2.4.4.jar\"
--py-files local:///opt/spark/conf/spark.properties
--conf spark.sql.crossJoin.enabled=true
--class org.apache.spark.examples.SparkPi
oci://<bucket-name>@<tenancy-name>/spark-examples_2.11-2.3.1-SNAPSHOT-jar-with-dependencies.jar 10",
"displayName": "spark-submit-test",
"sparkVersion": "2.4",
"driverShape": "VM.Standard2.1",
"executorShape": "VM.Standard2.1",
"numExecutors": 1,
"logsBucketUri": "",
"freeformTags": {},
"definedTags": {}
}