Oracle Cloud Infrastructure Data Flow-Anwendungen lokal entwickeln und in der Cloud bereitstellen
Oracle Cloud Infrastructure Data Flow ist ein vollständig verwalteter Apache Spark-Cloud-Service. Mit diesem Service können Sie Spark-Anwendungen in beliebiger Größe und mit minimalem Administrations- oder Einrichtungsaufwand ausführen. Data Flow ist ideal für die Planung zuverlässiger Batchverarbeitungsjobs mit langer Ausführungszeit geeignet.
Sie können Spark-Anwendungen entwickeln, ohne mit der Cloud verbunden zu sein. Sie können sie auf Ihrem Laptop schnell entwickeln, testen und iterieren. Wenn sie bereit sind, können Sie sie in Data Flow bereitstellen, ohne sie neu konfigurieren, Codeänderungen vornehmen oder Deployment-Profile anwenden zu müssen.
- Der größte Teil des Quellcodes und der Librarys zur Ausführung von Data Flow sind ausgeblendet. Sie müssen die Data Flow-SDK-Versionen nicht mehr abgleichen, und es gibt keine Drittanbieterabhängigkeitskonflikte mehr mit Data Flow.
- Die SDKs sind mit Spark kompatibel. Daher müssen Sie keine in Konflikt stehenden Drittanbieterabhängigkeiten mehr verschieben, sodass Sie Ihre Anwendung für schnellere, weniger komplizierte, kleinere und flexiblere Builds von Ihren Librarys trennen können.
- Die neue pom.xml-Vorlagendatei lädt eine nahezu identische Kopie von Data Flow auf Ihren lokalen Rechner herunter und erstellt sie. Sie können den Debugger auf Ihrem lokalen Rechner ausführen, um Probleme zu erkennen und zu beheben, bevor Sie die Anwendung in Data Flow ausführen. Sie können genau dieselbe Library-Version kompilieren und ausführen, die Data Flow ausführt. Oracle kann schnell entscheiden, ob Ihr Problem mit Data Flow oder Ihrem Anwendungscode zusammenhängt.
Bevor Sie beginnen
Bevor Sie mit der Entwicklung von Anwendungen beginnen, müssen Sie Folgendes einrichten und arbeiten:
- Eine Oracle Cloud-Anmeldung mit aktivierter API-Schlüsselfunktion. Laden Sie Ihren Benutzer unter Identität /Benutzer, und bestätigen Sie, dass Sie API-Schlüssel erstellen können.
- Ein API-Schlüssel, der für Ihre lokale Umgebung registriert und bereitgestellt wurde. Weitere Informationen finden Sie unter API-Schlüssel registrieren.
- Eine funktionierende lokale Installation von Apache Spark 2.4.4, 3.0.2, 3.2.1 oder 3.5.0. Sie können dies bestätigen, indem Sie spark-shell in der CLI ausführen.
- Apache Maven muss installiert sein. In den Anweisungen und Beispielen wird Maven verwendet, um die erforderlichen Abhängigkeiten herunterzuladen.
Prüfen Sie vor dem Start die Sicherheit in Data Flow. Es verwendet ein Delegationstoken, mit dem es Cloud-Vorgänge in Ihrem Namen ausführen kann. Sämtliche Vorgänge, die Sie mit Ihrem Account in der Oracle Cloud Infrastructure-Konsole ausführen können, kann Ihr Spark-Job mit Data Flow ausführen. Wenn die Ausführung im lokalen Modus erfolgt, müssen Sie einen API-Schlüssel verwenden, mit dem Ihre lokale Anwendung authentifizierte Anforderungen an verschiedene Oracle Cloud Infrastructure-Services stellen kann.

Verwenden Sie ganz einfach einen API-Schlüssel, der für denselben Benutzer wie bei der Anmeldung bei der Oracle Cloud Infrastructure-Konsole generiert wurde. Das heißt, dass Ihre Anwendungen dieselben Berechtigungen haben, unabhängig davon, ob Sie sie lokal oder in Data Flow ausführen.
1. Konzepte der lokalen Entwicklung
- Passen Sie Ihre lokale Spark-Installation mit Oracle Cloud Infrastructure-Library-Dateien an, damit sie der Laufzeitumgebung von Data Flow ähnelt.
- Stellen Sie fest, wo Ihr Code ausgeführt wird.
- Konfigurieren Sie den Oracle Cloud Infrastructure-HDFS-Client entsprechend.
Damit Sie nahtlos zwischen Ihrem Rechner und Data Flow verschieben können, müssen Sie bestimmte Versionen von Spark, Scala und Python in Ihrem lokalen Setup verwenden. Fügen Sie die JAR-Datei für den Oracle Cloud Infrastructure-HDFS-Connector hinzu. Fügen Sie außerdem zehn Abhängigkeits-Librarys zu Ihrer Spark-Installation hinzu, die installiert werden, wenn Ihre Anwendung in Data Flow ausgeführt wird. In den nachfolgenden Schritten wird erläutert, wie Sie diese zehn Abhängigkeits-Librarys herunterladen und installieren.
Spark-Version | Scala-Version | Python-Version |
---|---|---|
3,5 | 2,12 | 3,11 |
3.2.1 | 2.12.15 | 3.8 |
3.0.2 | 2.12.10 | 3.6.8 |
2.4.4 | 2.11.12 | 3.6.8 |
CONNECTOR=com.oracle.oci.sdk:oci-hdfs-connector:3.3.4.1.4.2
mkdir -p deps
touch emptyfile
mvn install:install-file -DgroupId=org.projectlombok -DartifactId=lombok -Dversion=1.18.26 -Dpackaging=jar -Dfile=emptyfile
mvn org.apache.maven.plugins:maven-dependency-plugin:2.7:get -Dartifact=$CONNECTOR -Ddest=deps
mvn org.apache.maven.plugins:maven-dependency-plugin:2.7:get -Dartifact=$CONNECTOR -Ddest=deps -Dtransitive=true -Dpackaging=pom
mvn org.apache.maven.plugins:maven-dependency-plugin:2.7:copy-dependencies -f deps/*.pom -DoutputDirectory=.
echo 'sc.getConf.get("spark.home")' | spark-shell
scala> sc.getConf.get("spark.home")
res0: String = /usr/local/lib/python3.11/site-packages/pyspark
In diesem Beispiel lautet das Spark-Home, in das die Abhängigkeitsdateien kopiert werden sollen, wie folgt:
/usr/local/lib/python3.11/site-packages/pyspark/jars
Kopieren Sie die Abhängigkeitsdateien in Ihr Spark-Home.deps
viele JAR-Dateien, von denen die meisten bereits in der Spark-Installation verfügbar sind. Sie müssen nur eine Teilmenge dieser JAR-Dateien in die Spark-Umgebung kopieren:bcpkix-jdk15to18-1.74.jar
bcprov-jdk15to18-1.74.jar
guava-32.0.1-jre.jar
jersey-media-json-jackson-2.35.jar
oci-hdfs-connector-3.3.4.1.4.2.jar
oci-java-sdk-addons-apache-configurator-jersey-3.34.0.jar
oci-java-sdk-common-*.jar
oci-java-sdk-objectstorage-extensions-3.34.0.jar
jersey-apache-connector-2.35.jar
oci-java-sdk-addons-apache-configurator-jersey-3.34.0.jar
jersey-media-json-jackson-2.35.jar
oci-java-sdk-objectstorage-generated-3.34.0.jar
oci-java-sdk-circuitbreaker-3.34.0.jar
resilience4j-circuitbreaker-1.7.1.jar
resilience4j-core-1.7.1.jar
vavr-match-0.10.2.jar
vavr-0.10.2.jar
Kopieren Sie sie aus dem Verzeichnis deps
in das Unterverzeichnis jars
, das Sie in Schritt 2 gefunden haben.import com.oracle.bmc.hdfs.BmcFilesystem
JAR-Dateien korrekt bereitgestellt
Wenn ein Fehler auftritt, haben Sie die Dateien an der falschen Stelle abgelegt. In diesem Beispiel ist ein Fehler aufgetreten:
JAR-Dateien falsch bereitgestellt
- Sie können den
spark.master
-Wert imSparkConf
-Objekt verwenden, das bei der Ausführung in Data Flow auf k8s://https://kubernetes.default.svc:443 gesetzt ist. - Die Umgebungsvariable
HOME
ist auf/home/dataflow
gesetzt, wenn die Anwendung in Data Flow ausgeführt wird.
In PySpark-Anwendungen ist ein neu erstelltes SparkConf
-Objekt leer. Damit die richtigen Werte angezeigt werden, verwenden Sie die getConf
-Methode für die Ausführung von SparkContext
.
Startumgebung | spark.master -Einstellung |
---|---|
Data Flow |
|
Lokaler Spark-Submit | spark.master: local[*] $HOME: Variable |
Eclipse | Nicht festgelegt $HOME: Variable |
Wenn Sie in Data Flow ausführen, ändern Sie den Wert von
spark.master
nicht. Andernfalls werden bei der Ausführung des Jobs nicht alle Ressourcen verwendet, die Sie durch Provisioning bereitgestellt haben. Wenn Ihre Anwendung in Data Flow ausgeführt wird, wird der Oracle Cloud Infrastructure-HDFS-Connector automatisch konfiguriert. Bei einer lokalen Ausführung müssen Sie ihn selbst konfigurieren, indem Sie die Konfigurationseigenschaften für den HDFS-Connector festlegen.
Sie müssen zumindest Ihr SparkConf-Objekt
aktualisieren, um Werte für fs.oci.client.auth.fingerprint
, fs.oci.client.auth.pemfilepath
, fs.oci.client.auth.tenantId
, fs.oci.client.auth.userId
und fs.oci.client.hostname
festzulegen.
Wenn Ihr API-Schlüssel eine Passphrase aufweist, müssen Sie fs.oci.client.auth.passphrase
festlegen.
Diese Variablen können nach der Erstellung der Session festgelegt werden. Verwenden Sie innerhalb Ihrer Programmierumgebung die jeweiligen SDKs, damit die API-Schlüsselkonfiguration ordnungsgemäß geladen wird.
ConfigFileAuthenticationDetailsProvider
entsprechend:import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider;
import com.oracle.bmc.ConfigFileReader;
//If your key is encrypted call setPassPhrase:
ConfigFileAuthenticationDetailsProvider authenticationDetailsProvider = new ConfigFileAuthenticationDetailsProvider(ConfigFileReader.DEFAULT_FILE_PATH, "<DEFAULT>");
configuration.put("fs.oci.client.auth.tenantId", authenticationDetailsProvider.getTenantId());
configuration.put("fs.oci.client.auth.userId", authenticationDetailsProvider.getUserId());
configuration.put("fs.oci.client.auth.fingerprint", authenticationDetailsProvider.getFingerprint());
String guessedPath = new File(configurationFilePath).getParent() + File.separator + "oci_api_key.pem";
configuration.put("fs.oci.client.auth.pemfilepath", guessedPath);
// Set the storage endpoint:
String region = authenticationDetailsProvider.getRegion().getRegionId();
String hostName = MessageFormat.format("https://objectstorage.{0}.oraclecloud.com", new Object[] { region });
configuration.put("fs.oci.client.hostname", hostName);
oci.config.from_file
entsprechend:import os
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
# Check to see if we're in Data Flow or not.
if os.environ.get("HOME") == "/home/dataflow":
spark_session = SparkSession.builder.appName("app").getOrCreate()
else:
conf = SparkConf()
oci_config = oci.config.from_file(oci.config.DEFAULT_LOCATION, "<DEFAULT>")
conf.set("fs.oci.client.auth.tenantId", oci_config["tenancy"])
conf.set("fs.oci.client.auth.userId", oci_config["user"])
conf.set("fs.oci.client.auth.fingerprint", oci_config["fingerprint"])
conf.set("fs.oci.client.auth.pemfilepath", oci_config["key_file"])
conf.set(
"fs.oci.client.hostname",
"https://objectstorage.{0}.oraclecloud.com".format(oci_config["region"]),
)
spark_builder = SparkSession.builder.appName("app")
spark_builder.config(conf=conf)
spark_session = spark_builder.getOrCreate()
spark_context = spark_session.sparkContext
In SparkSQL wird die Konfiguration anders verwaltet. Diese Einstellungen werden mit dem --hiveconf
-Switch übergeben. Um Spark-SQL-Abfragen auszuführen, verwenden Sie ein ähnliches Wrapper-Skript wie im Beispiel. Wenn Sie Ihr Skript in Data Flow ausführen, werden diese Einstellungen automatisch für Sie vorgenommen.
#!/bin/sh
CONFIG=$HOME/.oci/config
USER=$(egrep ' user' $CONFIG | cut -f2 -d=)
FINGERPRINT=$(egrep ' fingerprint' $CONFIG | cut -f2 -d=)
KEYFILE=$(egrep ' key_file' $CONFIG | cut -f2 -d=)
TENANCY=$(egrep ' tenancy' $CONFIG | cut -f2 -d=)
REGION=$(egrep ' region' $CONFIG | cut -f2 -d=)
REMOTEHOST="https://objectstorage.$REGION.oraclecloud.com"
spark-sql \
--hiveconf fs.oci.client.auth.tenantId=$TENANCY \
--hiveconf fs.oci.client.auth.userId=$USER \
--hiveconf fs.oci.client.auth.fingerprint=$FINGERPRINT \
--hiveconf fs.oci.client.auth.pemfilepath=$KEYFILE \
--hiveconf fs.oci.client.hostname=$REMOTEHOST \
-f script.sql
In den oben dargestellten Beispielen wird nur die Art und Weise geändert, wie Sie Ihren Spark-Kontext erstellen. Sie müssen keine weiteren Änderungen in Ihrer Spark-Anwendung vornehmen, das heißt, Sie können die anderen Aspekte Ihrer Spark-Anwendung wie üblich entwickeln. Wenn Sie die Spark-Anwendung in Data Flow bereitstellen, müssen Sie keinen Code und keine Konfiguration ändern.
2. "Fat JARs" für Java-Anwendungen erstellen
Bei Java- und Scala-Anwendungen müssen in der Regel mehr Abhängigkeiten in eine JAR-Datei aufgenommen werden, die als "Fat JAR" bezeichnet wird.
Wenn Sie Maven nutzen, können Sie hierfür das Shade
-Plug-in verwenden. Die folgenden Beispiele stammen aus Maven-Dateien (pom.xml
). Sie können sie als Ausgangspunkt für Ihr Projekt verwenden. Wenn Sie Ihre Anwendung erstellen, werden die Abhängigkeiten automatisch heruntergeladen und in Ihre Laufzeitumgebung eingefügt.
Wenn Sie Spark 3.5.0 oder 3.2.1 verwenden, gilt dieses Kapitel nicht. Befolgen Sie stattdessen den Anweisungen im Kapitel 2. Java-Abhängigkeiten für Apache Spark-Anwendungen in Data Flow verwalten.
Dieser Teil der pom.xml enthält die korrekten Versionen der Spark- und Oracle Cloud Infrastructure-Library für Data Flow (Spark 3.0.2). Er ist auf Java 8 ausgerichtet und schattiert gemeinsame in Konflikt stehende Klassendateien.
<properties>
<oci-java-sdk-version>1.25.2</oci-java-sdk-version>
</properties>
<dependencies>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-hdfs-connector</artifactId>
<version>3.2.1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-core</artifactId>
<version>${oci-java-sdk-version}</version>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-objectstorage</artifactId>
<version>${oci-java-sdk-version}</version>
</dependency>
<!-- spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>3.0.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>example.Example</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<relocations>
<relocation>
<pattern>com.oracle.bmc</pattern>
<shadedPattern>shaded.com.oracle.bmc</shadedPattern>
<includes>
<include>com.oracle.bmc.**</include>
</includes>
<excludes>
<exclude>com.oracle.bmc.hdfs.**</exclude>
</excludes>
</relocation>
</relocations>
<artifactSet>
<excludes>
<exclude>org.bouncycastle:bcpkix-jdk15on</exclude>
<exclude>org.bouncycastle:bcprov-jdk15on</exclude>
<!-- Including jsr305 in the shaded jar causes a SecurityException
due to signer mismatch for class "javax.annotation.Nonnull" -->
<exclude>com.google.code.findbugs:jsr305</exclude>
</excludes>
</artifactSet>
</configuration>
</plugin>
</plugins>
</build>
Dieser Teil der pom.xml
-Datei enthält die korrekten Versionen der Spark- und Oracle Cloud Infrastructure-Library für Data Flow ( Spark 2.4.4). Er ist auf Java 8 ausgerichtet und schattiert gemeinsame in Konflikt stehende Klassendateien.
<properties>
<oci-java-sdk-version>1.15.4</oci-java-sdk-version>
</properties>
<dependencies>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-hdfs-connector</artifactId>
<version>2.7.7.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-core</artifactId>
<version>${oci-java-sdk-version}</version>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-objectstorage</artifactId>
<version>${oci-java-sdk-version}</version>
</dependency>
<!-- spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>2.4.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>2.4.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>example.Example</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<relocations>
<relocation>
<pattern>com.oracle.bmc</pattern>
<shadedPattern>shaded.com.oracle.bmc</shadedPattern>
<includes>
<include>com.oracle.bmc.**</include>
</includes>
<excludes>
<exclude>com.oracle.bmc.hdfs.**</exclude>
</excludes>
</relocation>
</relocations>
<artifactSet>
<excludes>
<exclude>org.bouncycastle:bcpkix-jdk15on</exclude>
<exclude>org.bouncycastle:bcprov-jdk15on</exclude>
<!-- Including jsr305 in the shaded jar causes a SecurityException
due to signer mismatch for class "javax.annotation.Nonnull" -->
<exclude>com.google.code.findbugs:jsr305</exclude>
</excludes>
</artifactSet>
</configuration>
</plugin>
</plugins>
</build>
3. Anwendung lokal testen
Vor dem Deployment Ihrer Anwendung können Sie sie lokal testen, um sicherzustellen, dass sie funktioniert. Sie können drei Methoden verwenden. Wählen Sie die Methode aus, die für Sie am besten geeignet ist. In diesen Beispielen wird davon ausgegangen, dass der Name für Ihr Anwendungsartefakt application.jar
(für Java) oder application.py
(für Python) lautet.
- Data Flow blendet die meisten Quellcodes und Librarys aus, die für die Ausführung verwendet werden. Daher müssen Data Flow-SDK-Versionen nicht mehr übereinstimmen, und es dürfen keine Konflikte zwischen Drittanbieterabhängigkeiten und Data Flow auftreten.
- Spark wurde upgegradet, sodass die OCI-SDKs jetzt damit kompatibel sind. Dies bedeutet, dass widersprüchliche Drittanbieterabhängigkeiten nicht verschoben werden müssen, sodass die Anwendungs- und Bibliotheksbibliotheken für schnellere, weniger komplizierte, kleinere und flexiblere Builds getrennt werden können.
- Die neue Vorlage pom.xml-Datei lädt herunter und erstellt eine fast identische Kopie von Data Flow auf dem lokalen Rechner eines Entwicklers. Das heißt:
- Entwickler können den Schritt-Debugger auf ihrem lokalen Rechner ausführen, um Probleme vor der Ausführung in Data Flow schnell zu erkennen und zu lösen.
- Entwickler können genau dieselbe Library-Version kompilieren und ausführen, die Data Flow ausführt. So kann das Data Flow-Team schnell entscheiden, ob ein Problem mit Data Flow oder dem Anwendungscode vorliegt.
Methode 1: In Ihrer IDE ausführen
Wenn Sie in einer IDE wie Eclipse entwickelt haben, müssen Sie nur auf Ausführen klicken und die entsprechende Hauptklasse auswählen.
Bei der Ausführung ist es normal, dass Spark Warnmeldungen in der Konsole generiert, die Sie darüber informieren, dass Spark aufgerufen wird.
Methode 2: PySpark über die Befehlszeile ausführen
python3 application.py
$ python3 example.py
Warning: Ignoring non-Spark config property: fs.oci.client.hostname
Warning: Ignoring non-Spark config property: fs.oci.client.auth.fingerprint
Warning: Ignoring non-Spark config property: fs.oci.client.auth.tenantId
Warning: Ignoring non-Spark config property: fs.oci.client.auth.pemfilepath
Warning: Ignoring non-Spark config property: fs.oci.client.auth.userId
20/08/01 06:52:00 WARN Utils: Your hostname resolves to a loopback address: 127.0.0.1; using 192.168.1.41 instead (on interface en0)
20/08/01 06:52:00 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
20/08/01 06:52:01 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Warnungen zu Nicht-Spark-Konfigurationseigenschaften sind normal, wenn Sie den Oracle Cloud Infrastructure-HDFS-Treiber basierend auf Ihrem Konfigurationsprofil konfigurieren.Methode 3: Spark-Submit verwenden
Das Utility spark-submit
ist in der Spark-Distribution enthalten. Verwenden Sie diese Methode in bestimmten Situationen, beispielsweise wenn für eine PySpark-Anwendung zusätzliche JAR-Dateien erforderlich sind.
spark-submit
auszuführen:spark-submit --class example.Example example.jar
Da Sie den Namen der Hauptklasse in Data Flow angeben müssen, können Sie mit diesem Code ganz einfach sicherstellen, dass Sie den richtigen Klassennamen verwenden. Beachten Sie, dass bei Klassennamen die Groß-/Kleinschreibung berücksichtigt werden muss.
spark-submit
, um eine PySpark-Anwendung auszuführen, für die Oracle JDBC-JAR-Dateien erforderlich sind:
spark-submit \
--jars java/oraclepki-18.3.jar,java/ojdbc8-18.3.jar,java/osdt_cert-18.3.jar,java/ucp-18.3.jar,java/osdt_core-18.3.jar \
example.py
4. Anwendung bereitstellen
- Kopieren Sie das Anwendungsartefakt (
jar
-Datei, Python-Skript oder SQL-Skript) in Oracle Cloud Infrastructure Object Storage. - Wenn Ihre Java-Anwendung Abhängigkeiten aufweist, die von Data Flow nicht bereitgestellt werden, kopieren Sie die Assembly-
jar
-Datei. - Erstellen Sie eine Datenflussanwendung, die dieses Artefakt in Oracle Cloud Infrastructure Object Storage referenziert.
Nach Schritt 3 können Sie die Anwendung beliebig oft ausführen. Weitere Informationen finden Sie im Tutorial Erste Schritte mit Oracle Cloud Infrastructure Data Flow, in dem Sie Schritt für Schritt durch diesen Prozess geführt werden.
Wie geht es weiter?
Jetzt wissen Sie, wie Sie Ihre Anwendungen lokal entwickeln und in Data Flow bereitstellen können.