Funcionalidad de spark-submit en Data Flow
Descubra cómo utilizar Data Flow con spark-submit.
Compatibilidad de spark-submit
Puede utilizar las opciones compatibles con spark-submit para ejecutar las aplicaciones mediante Data Flow.
spark-submit es un comando estándar del sector para ejecutar aplicaciones en clusters de Spark. Data Flow admite las siguientes opciones compatibles con chispa-envío:
--conf
--files
--py-files
--jars
--class
--driver-java-options
--packages
main-application.jar
omain-application.py
- argumentos para
main-application
. Argumentos transferidos al método principal de la clase principal (si los hay).
La opción --files
simplifica la jerarquía de archivos, por lo que todos los archivos se colocan en el mismo nivel en el directorio de trabajo actual. Para mantener la jerarquía de archivos, utilice archive.zip
o --py-files
con un módulo de dependencia JAR, ZIP o EGG.
--packages
se utiliza para incluir cualquier otra dependencia proporcionando una lista delimitada por comas de coordenadas de Maven. Por ejemplo,
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.2
Todas las dependencias transitivas se manejan cuando se utiliza este comando. Con la opción
--packages
, el pod de controlador de cada ejecución debe descargar las dependencias de forma dinámica, lo cual depende de la estabilidad de la red y el acceso a la central de Maven u otros repositorios remotos. Utilice el empaquetador de dependencias de Data Flow para generar un archivo de dependencias para producción.Para todas las opciones de spark-submit en Data Flow, el URI debe comenzar por oci://...
. No se admiten los URI que comienzan por local://...
o hdfs://...
. Utilice los nombres de dominio completos (FQDN) en el URI. Cargue todos los archivos, incluido main-application
, en Oracle Cloud Infrastructure Object Storage.
Creación de una aplicación de flujo de datos Spark-Submit explica cómo crear una aplicación en la consola mediante spark-submit. También puede utilizar spark-submit con Java SDK o desde la CLI. Si utiliza CLI, no tiene que crear una aplicación de Data Flow para ejecutar la aplicación Spark con opciones compatibles con spark-submit en Data Flow. Esto resulta útil si ya tiene un comando de spark-submit que funciona en otro entorno. Cuando sigue la sintaxis del comando run submit
, se crea una aplicación, si no existe ya en el URI de main-application
.
Instalación de CLI pública con el comando de run submit
Estos pasos son necesarios para instalar una CLI pública con el comando run submit
para usar con Data Flow:
Uso de Spark-submit en Data Flow
Puede utilizar el comando de la CLI de spark-submit y convertirlo en un comando de CLI compatible en Data Flow.
run submit
. Si ya tiene una aplicación Spark en funcionamiento en cualquier cluster, está familiarizado con la sintaxis spark-submit. Por ejemplo:
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"
- Cargue todos los archivos, incluida la aplicación principal, en Object Storage.
- Sustituya los URI existentes por el URI
oci://...
correspondiente. -
Elimine los parámetros de spark-submit no admitidos o reservados. Por ejemplo,
--master
y--deploy-mode
están reservados para Data Flow y un usuario no necesita rellenarlos. -
Agregue el parámetro
--execute
y transfiera una cadena de comandos compatible con spark-submit. Para generar la cadena--execute
, mantenga los parámetros de spark-submit soportados y la aplicación principal y sus argumentos, en secuencia. Póngalos dentro de una cadena entre comillas (comillas simples o comillas dobles). - Sustituya
spark submit
por el prefijo de comando estándar de Oracle Cloud Infrastructure,oci data-flow run submit
. - Agregue los pares de argumentos y parámetros obligatorios de Oracle Cloud Infrastructure para
--profile
,--auth security_token
y--compartment-id
.
Ejemplos de Run Submit
Algunos ejemplos de run submit en Data Flow.
Ejemplos de Oci-cli
Ejemplos de run submit
con oci-cli
en 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
y 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
y 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
y 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}
Para activar la autenticación de entidad de recurso, agregue la propiedad de Spark en el archivo de configuración mediante spark submit y agregue la siguiente configuración en el método execute:
--execute "--conf dataflow.auth=resource_principal --conf other-spark-property=other-value"
Ejemplo de oci-curl
Ejemplo de run submit
mediante oci-curl
en 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": {}
}