Fonctionnalité spark-submit dans Data Flow
Découvrez comment utiliser Data Flow avec spark-submit.
Compatibilité avec spark-submit
Vous pouvez utiliser des options compatibles avec spark-submit pour l'exécution de vos applications à l'aide de Data Flow.
Spark-submit est une commande standard du secteur pour l'exécution d'applications sur des clusters Spark. Voici les options compatibles avec spark-submit qui sont prises en charge par Data Flow :
--conf
--files
--py-files
--jars
--class
--driver-java-options
--packages
main-application.jar
oumain-application.py
- arguments de
main-application
. Arguments transmis à la méthode principale de votre classe principale (le cas échéant).
L'option --files
aplatit votre hiérarchie de fichiers, de sorte que tous les fichiers sont placés au même niveau dans le répertoire de travail en cours. Pour conserver la hiérarchie de fichiers, utilisez archive.zip
ou --py-files
avec un module de dépendance JAR, ZIP ou EGG.
--packages
permet d'inclure d'autres dépendances en fournissant une liste de coordonnées Maven séparées par des virgules. Par exemple :
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.2
Toutes les dépendances transitives sont gérées lors de l'utilisation de cette commande. Avec l'option
--packages
, le pod de pilote de chaque exécution doit télécharger les dépendances de façon dynamique. Ce téléchargement dépend de la stabilité du réseau et de l'accès au référentiel central ou aux autres référentiels distants Maven. Utilisez l'utilitaire de package de dépendances Data Flow afin de générer une archive de dépendances pour la production.Pour toutes les options spark-submit dans Data Flow, l'URI doit commencer par oci://...
. Les URI commençant par local://...
ou hdfs://...
ne sont pas pris en charge. Utilisez les noms de domaine qualifiés complets dans l'URI. Chargez tous les fichiers, y compris main-application
, dans Oracle Cloud Infrastructure Object Storage.
Création d'une application Data Flow de soumission Spark explique comment créer une application dans la console à l'aide de spark-submit. Vous pouvez également utiliser spark-submit avec un kit SDK Java ou à partir de l'interface de ligne de commande. Si vous utilisez l'interface de ligne de commande, vous n'avez pas besoin de créer d'application Data Flow pour exécuter votre application Spark avec des options compatibles avec spark-submit sur Data Flow. Cette option se révèle très pratique si vous disposez déjà d'une commande spark-submit dans un autre environnement. Lorsque vous suivez la syntaxe de la commande run submit
, une application est créée s'il n'en n'existe pas déjà une dans l'URI main-application
.
Installation d'une interface de ligne de commande publique à l'aide de la commande run submit
Afin d'installer une CLI publique à l'aide de la commande run submit
pour une utilisation avec Data Flow, procédez comme suit :
Utilisation de la soumission Spark dans Data Flow
Vous pouvez convertir la commande d'interface de ligne de commande spark-submit en une commande compatible dans Data Flow.
run submit
. Si vous disposez déjà d'une application Spark fonctionnelle dans un cluster, vous connaissez déjà la syntaxe spark-submit. Par exemple :
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"
- Téléchargez tous les fichiers, y compris l'application principale, dans Object Storage.
- Remplacez les URI existants par l'URI
oci://...
correspondant. -
Enlevez tous les paramètres spark-submit non pris en charge ou réservés. Par exemple,
--master
et--deploy-mode
sont réservés à Data Flow et un utilisateur n'a pas besoin de les renseigner. -
Ajoutez le paramètre
--execute
et transmettez-le dans une chaîne de commande compatible spark-submit. Pour créer la chaîne--execute
, conservez dans l'ordre les paramètres spark-submit pris en charge, ainsi que l'application principale et ses arguments. Placez-les dans une chaîne entre guillemets (guillemets simples ou guillemets doubles). - Remplacez
spark submit
par le préfixe de commande standard d'Oracle Cloud Infrastructure :oci data-flow run submit
. - Ajoutez l'argument obligatoire et les paires de paramètre d'Oracle Cloud Infrastructure pour
--profile
,--auth security_token
et--compartment-id
.
Exemples de run submit
Voici des exemples de run submit dans Data Flow.
Exemples d'oci-cli
Exemples d'utilisation de run submit
avec oci-cli
dans 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
et 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
et 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
et 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}
Pour activer l'authentification par principal de ressource, ajoutez la propriété Spark dans le fichier de configuration à l'aide de spark-submit, puis ajoutez la configuration suivante dans la méthode execute :
--execute "--conf dataflow.auth=resource_principal --conf other-spark-property=other-value"
Exemple d'oci-curl
Exemple de code run submit
utilisant oci-curl
dans 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": {}
}