Fonctionnalité spark-submit dans le service de flux de données
Voyez comment utiliser le service de flux de données avec spark-submit.
Compatibilité avec spark-submit
Vous pouvez utiliser des options compatibles avec spark-submit pour exécuter vos applications à l'aide du service de flux de données.
Spark-submit est une commande standard de l'industrie permettant d'exécuter des applications dans les grappes Spark. Les options compatibles avec spark-submit suivantes sont prises en charge par le service de flux de données :
--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 (si elle existe).
L'option --files
aplatit votre hiérarchie de fichiers, de sorte que tous les fichiers se retrouvent au même niveau dans le répertoire de travail courant. 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 toutes les autres dépendances en fournissant une liste délimitée par des virgules de coordonnées Maven. Par exemple,
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.2
Toutes les dépendances transitives sont traitées lorsque cette commande est utilisée. Avec l'option
--packages
, le pod du pilote de chaque exécution doit télécharger les dépendances de manière dynamique, ce qui nécessite la stabilité du réseau et l'accès à Maven Central ou à d'autres référentiels distants. Utilisez l'encapsuleur de dépendances du service de flux de données pour générer une archive de dépendances pour la production.Pour toutes les options spark-submit dans le flux de données, 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 complets (FQDN) dans l'URI. Chargez tous les fichiers, y compris main-application
, dans le service de stockage d'objets pour Oracle Cloud Infrastructure Object Storage.
La rubrique Création d'une application de flux de données Spark-Submit explique comment créer une application dans la console à l'aide de spark-submit. Vous pouvez également utiliser spark-submit avec une trousse SDK Java ou à partir de l'interface de ligne de commande. Si vous utilisez l'interface CLI, vous n'avez pas à créer une application de flux de données pour exécuter votre application Spark avec des options compatibles avec spark-submit dans le service de flux de données. Cette fonction est utile si vous disposez déjà d'une commande spark-submit qui fonctionne dans un environnement différent. Lorsque vous suivez la syntaxe de la commande run submit
, une application est créée, s'il n'en existe pas déjà une dans l'URI main-application
.
Installation de l'interface CLI publique à l'aide de la commande run submit
Ces étapes doivent être exécutées pour installer une interface CLI publique à l'aide de la commande run submit
pour l'utiliser avec le service de flux de données :
Utilisation de Spark-submit dans le service de flux de données
Vous pouvez convertir votre commande CLI spark-submit en commande CLI compatible dans le service de flux de données.
run submit
. Si vous utilisez déjà une application Spark dans une grappe, vous connaissez la syntaxe de 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 le stockage d'objets.
- Remplacez les URI existants par l'URI
oci://...
correspondant. -
Supprimez tout paramètre spark-submit non pris en charge ou réservé. Par exemple,
--master
et--deploy-mode
sont réservés au service de flux de données et un utilisateur n'a pas besoin de les alimenter. -
Ajoutez le paramètre
--execute
et transmettez une chaîne de commande compatible avec spark-submit. Pour créer la chaîne--execute
, laissez les paramètres spark-submit pris en charge, ainsi que l'application principale et ses arguments, dans le même ordre. Placez-les dans une chaîne entre guillemets (simples ou doubles). - Remplacez
spark submit
par le préfixe de commande standard d'Oracle Cloud Infrastructure,oci data-flow run submit
. - Ajoutez les paires d'argument et de paramètre obligatoires d'Oracle Cloud Infrastructure pour
--profile
,--auth security_token
et--compartment-id
.
Exemples de code run submit
Quelques exemples de commande run submit dans le service de flux de données.
Exemples d'oci-cli
Exemples de run submit
avec oci-cli
dans le service de flux de données.
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 avec le 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
Exemples de run submit
avec oci-curl
dans le service de flux de données.
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": {}
}