Funzionalità Spark-Submit in Data Flow

Scopri come utilizzare Data Flow con Spark-submit.

Compatibilità Spark-Submit

È possibile utilizzare le opzioni compatibili con spark-submit per eseguire le applicazioni mediante Data Flow.

Spark-submit è un comando standard del settore per l'esecuzione di applicazioni sui cluster Spark. Le seguenti opzioni compatibili con spark-submit sono supportate da Data Flow:

  • --conf
  • --files
  • --py-files
  • --jars
  • --class
  • --driver-java-options
  • --packages
  • main-application.jar o main-application.py
  • argomenti per main-application. Argomenti passati al metodo principale della classe principale (se presente).

L'opzione --files appiattisce la gerarchia dei file, in modo che tutti i file vengano posizionati allo stesso livello nella directory di lavoro corrente. Per mantenere la struttura gerarchica dei file, utilizzare archive.zip o --py-files con un modulo dipendente JAR, ZIP o EGG.

L'opzione --packages viene utilizzata per includere qualsiasi altra dipendenza fornendo una lista delimitata da virgole di coordinate Maven. Ad esempio:
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.2
Tutte le dipendenze transitive vengono gestite quando si utilizza questo comando.
Nota

Con l'opzione --packages, ogni pod driver di Run deve scaricare le dipendenze in modo dinamico, che si basa sulla stabilità della rete e sull'accesso ai repository centrali o remoti Maven. Utilizzare Data Flow Dependency Packager per generare un archivio di dipendenze per la produzione.
Nota

Per tutte le opzioni spark-submit in Data Flow, l'URI deve iniziare oci://.... Gli URI che iniziano con local://... o hdfs://... non sono supportati. Utilizzare i nomi di dominio completamente qualificati (FQDN) nell'URI. Carica tutti i file, incluso main-application, in Oracle Cloud Infrastructure Object Storage.

La creazione di un'applicazione di flusso dati Spark-Submit spiega come creare un'applicazione nella console utilizzando spark-submit. Puoi anche utilizzare spark-submit con un SDK Java o dall'interfaccia CLI. Se si utilizza l'interfaccia CLI, non è necessario creare un'applicazione di flusso dati per eseguire l'applicazione Spark con le opzioni compatibili con spark-submit in Flusso dati. Questa opzione è utile se si dispone già di un comando spark-submit funzionante in un ambiente diverso. Quando si segue la sintassi del comando run submit, viene creata un'applicazione, se non ne esiste già una nell'URI main-application.

Installazione dell'interfaccia CLI pubblica con il comando di esecuzione invio

I passi riportati di seguito sono necessari per installare un'interfaccia CLI pubblica con il comando run submit da utilizzare con Data Flow.

  1. Creare un ambiente Python personalizzato da utilizzare come destinazione dell'interfaccia CLI.
    python3.9 -m venv cli-3
    source cli-3/bin/activate
  2. Installare l'interfaccia CLI (Command Line Interface) pubblica.
  3. Verificare che i comandi run submit siano caricati:
    oci --version
     
    oci data-flow run submit
    Usage: oci data-flow run submit [OPTIONS]
     
    Error: Missing option(s) --compartment-id, --execute.
  4. Autenticare la sessione:
    oci session authenticate
    • Selezionare un'area dall'elenco.
    • Immettere il nome del profilo da creare.
    • Crea un profilo token:
      oci iam region list --config-file /Users/<user-name>/.oci/config --profile <profile_name> --auth security_token

Uso di Spark-submit in Data Flow

È possibile eseguire il comando CLI spark-submit e convertirlo in un comando CLI compatibile in Data Flow.

Il comando compatibile spark-submit in Data Flow è il comando run submit. Se hai già un'applicazione Spark funzionante in qualsiasi cluster, hai familiarità con la sintassi spark-submit. Ad esempio:
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
Per eseguire questa applicazione in Data Flow, il comando CLI è:
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"
Per ottenere il comando Data Flow compatibile, attenersi alla procedura riportata di seguito.
  1. Carica tutti i file, inclusa l'applicazione principale, nello storage degli oggetti.
  2. Sostituire gli URI esistenti con l'URI oci://... corrispondente.
  3. Rimuovere eventuali parametri spark-submit non supportati o riservati. Ad esempio, --master e --deploy-mode sono riservati per il flusso dati e un utente non deve compilarli.

  4. Aggiungere il parametro --execute e passare in una stringa di comando compatibile spark-submit. Per creare la stringa --execute, mantenere in sequenza i parametri spark-submit supportati, l'applicazione principale e i relativi argomenti. Mettili all'interno di una stringa tra virgolette (preventivi singoli o virgolette doppie).

  5. Sostituire spark submit con il prefisso del comando standard di Oracle Cloud Infrastructure, oci data-flow run submit.
  6. Aggiungere le coppie obbligatorie di argomenti e parametri di Oracle Cloud Infrastructure per --profile, --auth security_token e --compartment-id.

Esegui esempi sottomissione

Alcuni esempi di sottomissione dell'esecuzione in Data Flow.

  • Esempi di sottomissione dell'esecuzione mediante Oci-cli.
  • Esempio di sottomissione dell'esecuzione con Oci-curl.

Esempi Oci-cli

Esempi di run submit che utilizzano oci-cli in Data Flow.

Sottomissione esecuzione di base:
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"
Esegui invio con configurazioni facoltative di --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"
Esegui invio con 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"
Esegui invio con convalida URL all'interno di 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}

Per abilitare l'autenticazione del principal risorsa, aggiungere la proprietà Spark nel file di configurazione utilizzando la sottomissione Spark e aggiungere la configurazione seguente nel metodo di esecuzione:

--execute 
"--conf dataflow.auth=resource_principal
 --conf other-spark-property=other-value" 

Esempio Oci-curl

Esempio di run submit che utilizza oci-curl in Data Flow.

oci-curl <IP-Address>:443 POST /Users/<user-name>/workspace/sss/dependency_test/spark-submit-test.json
 /20200129/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": {}
}