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.jar
odermain-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.2
Alle 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 in der Konsole mit spark-submit erstellen. Sie können spark-submit auch mit einem Java-SDK oder über die CLI verwenden. Wenn Sie die 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 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"
- 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:
--master
und--deploy-mode
sind für Data Flow reserviert und müssen nicht von einem Benutzer angegeben werden. -
Fügen Sie den Parameter
--execute
hinzu, und übergeben Sie eine spark-submit-kompatible Befehlszeichenfolge. Um die Zeichenfolge--execute
zu 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 submit
durch 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_token
und--compartment-id
hinzu.
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
/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": {}
}