Spark-Submit-Funktionalität in Data Flow
Erfahren Sie, wie Sie Data Flow mit spark-submit verwenden.
Spark-Submit-Kompatibilität
Sie können Ihre Anwendungen mit spark-submit-kompatiblen Optionen mit Data Flow ausführen.
Spark-Submit ist ein branchenüblicher Befehl zum Ausführen von Anwendungen in Spark-Clustern. Die folgenden spark-submit-Kompatibilitätsoptionen werden von Datenfluss unterstützt:
-
--conf -
--files -
--py-files -
--jars -
--class -
--driver-java-options -
--packages -
main-application.jarodermain-application.py - Argumente für
main-application. Argumente, die an die Hauptmethode der Hauptklasse übergeben werden (sofern vorhanden).
Mit der Option --files wird die Dateihierarchie vereinfacht, sodass alle Dateien auf derselben Ebene im aktuellen Arbeitsverzeichnis abgelegt werden. Um die Dateihierarchie beizubehalten, verwenden Sie entweder archive.zip oder --py-files mit einem JAR-, ZIP- oder EGG-Abhängigkeitsmodul.
--packages werden alle anderen Abhängigkeiten einbezogen, indem eine durch Komma getrennte Liste mit Maven-Koordinaten angegeben wird. Beispiel:
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.2Alle transitiven Abhängigkeiten werden bei Verwendung dieses Befehls verarbeitet. Mit der Option
--packages muss der Treiberpod jeder Ausführung Abhängigkeiten dynamisch herunterladen. Dafür ist ein stabiles Netzwerk und Zugriff auf das zentrale Maven-Repository oder andere Remote-Repositorys erforderlich. Mit dem Data Flow Abhängigkeits-Packager können Sie ein Abhängigkeitsarchiv für die Produktion generieren.Für alle spark-submit-Optionen in Data Flow muss die URI mit oci://... beginnen. Mit local://... oder hdfs://... beginnende URIs werden nicht unterstützt. Verwenden Sie die vollqualifizierten Domainnamen (FQDN) in der URI. Laden Sie alle Dateien, einschließlich main-application, in Oracle Cloud Infrastructure Object Storage.
Unter Spark-Submit-Datenflussanwendung erstellen wird erläutert, wie Sie eine Anwendung mit spark-submit in der Konsole erstellen. Sie können spark-submit auch mit einem Java-SDK oder über die CLI verwenden. Wenn Sie eine CLI verwenden, müssen Sie keine Datenflussanwendung erstellen, um Ihre Spark-Anwendung mit spark-submit-kompatiblen Optionen in Data Flow auszuführen. Dies ist hilfreich, wenn Sie bereits einen funktionierenden spark-submit-Befehl in einer anderen Umgebung verwenden. Wenn Sie die Syntax des Befehls run submit befolgen, wird eine Anwendung erstellt, sofern unter der URI main-application noch keine Anwendung vorhanden ist.
Öffentliche CLI mit dem Befehl "run submit" installieren
Diese Schritte sind erforderlich, um eine öffentliche CLI mit dem Befehl run submit zur Verwendung mit Data Flow zu installieren:
Spark-Submit in Data Flow verwenden
Sie können den spark-submit-CLI-Befehl in einen kompatiblen CLI-Befehl in Data Flow konvertieren.
run submit. Wenn Sie bereits eine funktionierende Spark-Anwendung in einem beliebigen Cluster verwenden, sind Sie mit der Syntax zum Übermitteln von Funken vertraut. Beispiel:
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 1000oci 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"- Laden Sie alle Dateien, einschließlich der Hauptanwendung, in Object Storage hoch.
- Ersetzen Sie die vorhandenen URIs durch die entsprechende
oci://...-URI. -
Entfernen Sie alle nicht unterstützten oder reservierten spark-submit-Parameter. Beispiel:
--masterund--deploy-modesind für Data Flow reserviert und müssen nicht von einem Benutzer angegeben werden. -
Fügen Sie den Parameter
--executehinzu, und übergeben Sie eine spark-submit-kompatible Befehlszeichenfolge. Um die Zeichenfolge--executezu erstellen, behalten Sie die unterstützten spark-submit-Parameter sowie die Hauptanwendung und ihre Argumente nacheinander bei. Stellen Sie sie in eine Zeichenfolge in (einzelnen oder doppelten) Anführungszeichen. - Ersetzen Sie
spark submitdurch das Oracle Cloud Infrastructure-Standardbefehlspräfixoci data-flow run submit. - Fügen Sie die erforderlichen Argument- und Parameterpaare von Oracle Cloud Infrastructure für
--profile,--auth security_tokenund--compartment-idhinzu.
Beispiele für "run submit"
Beispiele für "run submit" in Data Flow.
Beispiele für "oci-cli"
Beispiele für run submit mit 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 und 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 und 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 und 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}Um die Resource-Principal-Authentifizierung zu aktivieren, fügen Sie die Spark-Eigenschaft mit Spark-Submit in der Konfigurationsdatei hinzu, und fügen Sie die folgende Konfiguration in der Ausführungsmethode hinzu:
--execute "--conf dataflow.auth=resource_principal --conf other-spark-property=other-value"
Beispiel für "oci-curl"
Beispiel für run submit mit oci-curl in 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": {}
}