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
omain-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.
--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. 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.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.
Uso di Spark-submit in Data Flow
È possibile eseguire il comando CLI spark-submit e convertirlo in un comando CLI compatibile in Data Flow.
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
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"
- Carica tutti i file, inclusa l'applicazione principale, nello storage degli oggetti.
- Sostituire gli URI esistenti con l'URI
oci://...
corrispondente. -
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. -
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). - Sostituire
spark submit
con il prefisso del comando standard di Oracle Cloud Infrastructure,oci data-flow run submit
. - 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 Oci-cli
Esempi di run submit
che utilizzano oci-cli
in 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}
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": {}
}