Introducción a Oracle Cloud Infrastructure Data Flow

En este tutorial se presenta Oracle Cloud Infrastructure Data Flow, un servicio que le permite ejecutar cualquier aplicación de Apache Spark a cualquier escala sin infraestructura que desplegar o gestionar.

Si ha utilizado Spark antes, podrá sacar más provecho de este tutorial, si bien no se necesita ningún conocimiento previo de Spark. Se le han proporcionado todas las aplicaciones y datos de Spark necesarios. En este tutorial se muestra cómo Data Flow hace que la ejecución de aplicaciones de Spark sea fácil, repetible, segura y sencilla en toda la empresa.

En este tutorial aprenderá a:
  1. Cómo utilizar Java para realizar ETL en una aplicación de Data Flow.
  2. Cómo utilizar SparkSQL en una aplicación SQL.
  3. Cómo crear y ejecutar una aplicación de Python para realizar una tarea de Machine Learning sencilla.

También puede realizar el tutorial mediante spark-submit desde la CLI o spark-submit y Java SDK.

Ventajas de Data Flow
Por este motivo, es mejor usar Data Flow que ejecutar sus propios clusters de Spark u otros servicios de Spark disponibles.
  • No tiene servidor, lo que significa que no necesita expertos para aprovisionar, aplicar parches, actualizar o mantener los clusters de Spark. Esto significa que se podrá centrar en el código de Spark y solo en eso.
  • Incluye operaciones y ajustes simples. El acceso a la interfaz de usuario de Spark es una selección y se rige por políticas de autorización de IAM. Si un usuario se queja porque un trabajo se está ejecutando de forma demasiada lenta, cualquier usuario con acceso a la ejecución puede abrir la interfaz de usuario de Spark y saber cuál es la causa raíz. Acceder al servidor de historiales de Spark de los trabajos que ya se hayan realizado es muy sencillo.
  • Es idóneo para el procesamiento por lotes. Las API de REST capturan y ponen a disposición automáticamente la salida de la aplicación. ¿Necesita ejecutar un trabajo SQL de Spark de cuatro horas y cargar los resultados en el sistema de gestión de pipelines? En Data Flow, solo recibirá dos llamadas a la API de REST.
  • Cuenta con control consolidado. Data Flow ofrece una vista consolidada de todas las aplicaciones de Spark, de quién las están ejecutando y de lo que consumen. ¿Desea saber qué aplicaciones están escribiendo más datos y quién las está ejecutando? Solo hay que ordenar por la columna Datos escritos. ¿Se está ejecutando un trabajo durante demasiado tiempo? Cualquier usuario que tenga los permisos correctos de IAM puede ver el trabajo y detenerlo.
Ejemplo de una lista de ejecuciones. Hay una tabla con nueve columnas y tres filas. Las columnas son: Nombre, Lenguaje, Estado, Propietario, Creación, Duración, Total de OCPU, Lectura de datos y Escritura de datos. Las celdas de las tres filas están rellenas. Los nombres son: Tutorial Example 1, Tutorial Example 2 y Tutorial Example 3. Los lenguajes de cada uno son: Java, Python y SQL respectivamente. Los tres tienen un estado Succeeded.

Antes de empezar

Para realizar correctamente este tutorial, debe haber configurado su arrendamiento y puede acceder a Data Flow.

Configuración del arrendamiento

Para que se pueda ejecutar Data Flow, debe otorgar permisos que permitan la captura de logs eficaz y la gestión de ejecuciones. Consulte la sección Configuración de la administración de la Guía de servicio de Data Flow y siga las instrucciones proporcionadas en ella.

Acceso a Data Flow
  1. En la consola, seleccione el menú de navegación para mostrar la lista de servicios disponibles.
  2. Seleccione Analytics & AI.
  3. En Big Data, seleccione Data Flow.
  4. Seleccione Aplicaciones.

1. ETL con Java

Ejercicio para aprender a crear una aplicación de Java en Data Flow

Estos pasos son para utilizar la interfaz de usuario de la consola. Puede resolver este ejercicio con spark-submit desde la CLI o spark-submit con Java SDK.

Visión general

El primer paso más habitual en las aplicaciones de procesamiento de datos es tomar datos de un origen y convertirlos en un formato adecuado para la generación de informes y otros métodos de análisis. En una base de datos habría que cargar un archivo plano en ella y que crear los índices. En Spark, el primer paso es limpiar y convertir los datos de un formato de texto en formato de Parquet. Parquet es un formato binario optimizado que soporta lecturas eficaces, lo que lo hace idóneo para la generación de informes y el análisis. En este ejercicio, toma datos de origen, los convierte en Parquet y, a continuación, realiza una serie de acciones interesantes con ellos. El juego de datos es Berlin Airbnb Data, descargado del sitio web de Kaggle según las condiciones de la licencia Creative Commons CC0 1.0 Universal (CC0 1.0) "Dedicación de Dominio Público".

Hay un cuadro denominado Datos de CSV, Fácil de leer, Lento. Una flecha se dirige a un cuadro a la derecha con la etiqueta Parquet, Difícil de leer, Rápido. De ahí parten dos flechas, una a un cuadro denominado Consultas SQL y otra a un cuadro denominado Machine Learning.

Los datos se proporcionan en formato CSV y el primer paso consiste en convertir estos datos en Parquet y almacenarlos en el almacén de objetos para realizar el procesamiento descendente. Se proporciona una aplicación Spark, denominada oow-lab-2019-java-etl-1.0-SNAPSHOT.jar, para realizar esta conversión. El objetivo es crear una aplicación de Data Flow que ejecute esta aplicación Spark y ejecutarla con los parámetros correctos. Debido a que está empezando, este ejercicio le guía por pasos y proporciona los parámetros que necesita. Posteriormente, usted tendrá que proporcionar los parámetros, por lo que debe entender lo que está introduciendo y por qué.

Creación de la aplicación Java

Cree una aplicación Java de Data Flow desde la consola, o con Spark-submit desde la línea de comandos o mediante SDK.

Cree la aplicación Java en la consola.

Cree una aplicación Java en Data Flow desde la consola.

Creación de una aplicación de Data Flow.

  1. Vaya al servicio Data Flow en la consola. Para ello, amplíe el menú de hamburguesa de la parte superior izquierda y vaya a la parte inferior.
  2. Resalte Data Flow y, a continuación, seleccione Aplicaciones. Seleccione el compartimento en el que desea que se creen las aplicaciones de Data Flow. Por último, seleccione Crear aplicación. Aplicación SelectCreate
  3. Seleccione Aplicación Java e introduzca un nombre para la aplicación, por ejemplo, Tutorial Example 1. Se muestra la página Aplicación con el elemento extensible Crear aplicación en la parte derecha. En la parte superior se encuentra una sección denominada Información general, que contiene un campo que se denomina Nombre y otro denominado Descripción. A continuación, se muestra una sección denominada Configuración de recursos en la que están visibles dos campos de texto. En la parte inferior hay tres botones: Crear, Guardar como pila y Cancelar.
  4. Desplácese hacia abajo hasta Configuración de recursos. Deje para todos estos valores su configuración por defecto. Se muestra la página Aplicación con el elemento extensible Crear aplicación en la parte derecha. La sección Resource Configuration (Configuración de recursos) está visible. En la parte superior hay una lista desplegable denominada Versión Spark. La opción Spark 3.0.2 está seleccionada, pero también se muestran Spark 2.4.4 y Spark 3.2.1. A continuación, pero parcialmente oculto por la lista de versiones de Spark, se encuentra un campo de texto llamado Seleccionar un pool. A continuación, se muestra un campo de texto denominado Driver Shape. VM.Standard.E4. Se ha seleccionado Flex. Debajo y parcialmente recortado hay una sección para personalizar el número de OCPU. En la parte inferior hay tres botones: Crear, Guardar como pila y Cancelar.
  5. Desplácese hacia abajo hasta Configuración de la aplicación. Configure la aplicación de la siguiente forma:
    1. Dirección URL de archivo: es la ubicación del archivo JAR de Object Storage. La ubicación de esta aplicación es:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
    2. Nombre de la clase principal: las aplicaciones de Java necesitan un nombre de clase principal que depende de la aplicación. Para este ejercicio, introduzca
      convert.Convert
    3. Argumentos: la aplicación Spark espera dos parámetros de línea de comandos, uno para la entrada y otro para la salida. En el campo Argumentos, introduzca
      ${input} ${output}
      Se le solicitarán valores por defecto y es una buena idea introducirlos ahora.
    La página Aplicación que se muestra con la opción extensible Crear aplicación en la parte derecha de la sección Configuración de aplicación side.The está visible. En la parte superior hay una sección llamada Seleccionar un archivo. Se ha seleccionado una casilla de control con la etiqueta Introducir la URL del archivo manualmente. A continuación hay un campo de texto denominado Dirección URL de archivo. Está relleno con la ruta de acceso al archivo .jar. Debajo hay un campo de texto denominado Nombre de la clase principal. Está relleno con convert.Convert. Debajo hay un campo de texto denominado Argumentos. Está relleno con ${input} ${output}.
  6. Los argumentos de entrada y salida son:
    1. Entrada:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
    2. Salida:
      oci://<yourbucket>@<namespace>/optimized_listings

    Vuelva a comprobar la configuración de la aplicaciones para confirmar que tiene una apariencia similar a la siguiente: Se muestra la página Aplicación con el elemento extensible Crear aplicación en la parte derecha. La sección Configuración de la aplicación está visible. Hay un campo de texto denominado Argumentos. Está relleno con ${input} ${output}. Debajo hay campos de texto para Parámetros. A la izquierda hay dos que aparecen atenuados y rellenos con una entrada y una salida respectivamente. Junto a cada uno de ellos hay un campo de texto denominado Valor por defecto, rellenos con los directorios respectivos. A continuación se muestra una sección denominada URI de archivo.

    Nota

    Debe personalizar la ruta de acceso de salida para que apunte a un cubo del inquilino.
  7. Cuando haya terminado, seleccione Crear. Cuando se haya creado la aplicación, la verá en la lista Aplicación. Página Aplicaciones. En la lista de aplicaciones hay una aplicación. Consta de siete columnas, Nombre, Idioma, versión de Spark, Tipo de aplicación, Propietario, Creado y Actualizado. La columna Nombre contiene Tutorial Example 1. El lenguaje está definido en Java. La versión de Spark está definida en 3.2.1. El tipo de aplicación está definido en Lote. Los demás campos se rellenan en función de quién creó la aplicación, cuándo se creó y cuándo se actualizó por última ocasión (que, en este caso, es la misma fecha y hora que se creó).

Felicidades! Ha creado su primera aplicación de Data Flow. Ahora puede ejecutarla.

Creación de la aplicación Java mediante spark-submit y la CLI

Utilice spark-submit y CLI para crear una aplicación Java.

  1. Configuración del arrendamiento.
  2. Si no tiene un cubo en Object Storage en el que poder guardar la entrada y los resultados, debe crear un cubo con una estructura de carpetas adecuada. En este ejemplo, la estructura de carpetas es /output/tutorial1.
  3. Ejecute este código:
    oci --profile <profile-name> --auth security_token data-flow run submit \
    --compartment-id <compartment-id> \
    --display-name Tutorial_1_ETL_Java \
    --execute '
        --class convert.Convert 
        --files oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv 
        oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar \
        kaggle_berlin_airbnb_listings_summary.csv oci://<bucket-name>@<namespace-name>/output/tutorial1'
    Si ha ejecutado este tutorial antes, suprima el contenido del directorio de salida, oci://<bucket-name>@<namespace-name>/output/tutorial1, para evitar fallos en el tutorial.
    Nota

    Para buscar el ID de compartimento, en el menú de navegación, seleccione Identidad y seleccione Compartimentos. Se muestran los compartimentos disponibles, incluido el OCID de cada uno.
Creación de la aplicación Java mediante Spark-Submit y SDK

Complete el ejercicio para crear una aplicación Java en Data Flow mediante spark-submit y el SDK de Java.

Estos son los archivos para ejecutar este ejercicio y están disponibles en los siguientes URI públicos de Object Storage:

  • Archivos de entrada en formato CSV:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
  • Archivo JAR:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
  1. Cree un cubo en Object Storage en el que pueda guardar la entrada y los resultados.
  2. Ejecute este código:
    public class Tutorial1 {
     
      String compartmentId = "<your-compartment_id>"; // Might need to change comapartment id
     
      public static void main(String[] ars) throws IOException {
        System.out.println("ETL with JAVA Tutorial");
        new Tutorial1().crateRun();
      }
     
      public void crateRun() throws IOException {
     
        // Authentication Using BOAT config from ~/.oci/config file
        final ConfigFileReader.ConfigFile configFile = ConfigFileReader.parseDefault();
     
        final AuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);
     
        // Creating a Data Flow Client
        DataFlowClient client = new DataFlowClient(provider);
        client.setRegion(Region.US_PHOENIX_1);
        client.setEndpoint("http://<IP_address>:443");   // Might need to change endpoint
     
        // creation of execute String
        String executeString = "--class convert.Convert "
            + "--files oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv "
            + "oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar "
            + "kaggle_berlin_airbnb_listings_summary.csv oci://<bucket_name>@<tenancy_name>/output/tutorial1";
     
        // Create Run details and create run.
        CreateRunDetails runDetails = CreateRunDetails.builder()
            .compartmentId(compartmentId).displayName("Tutorial_1_ETL_with_JAVA").execute(executeString)
            .build();
     
        CreateRunRequest runRequest = CreateRunRequest.builder().createRunDetails(runDetails).build();
        CreateRunResponse response = client.createRun(runRequest);
        GetRunRequest grq = GetRunRequest.builder().opcRequestId(response.getOpcRequestId()).runId(response.getRun().getId()).build();
        GetRunResponse gr = client.getRun(grq);
     
        System.out.println("Run Created!");
     
      }
    }
Ejecución de la aplicación Java de Data Flow

Una vez que hemos creado una aplicación Java, puede ejecutarla.

  1. Si ha seguido los pasos con precisión, todo lo que tiene que hacer es resaltar la aplicación en la lista, seleccionar el menú Acciones y seleccionar Ejecutar.
  2. Tiene la opción de personalizar parámetros antes de ejecutar la aplicación. En su caso, ha introducido los valores precisos con anticipación y puede empezar la ejecución haciendo clic en Ejecutar. Se muestra la página extensible para Ejecutar aplicación Java en la parte derecha de la página Aplicaciones. En la parte superior se encuentra una lista desplegable denominada Unidad de controlador; la opción VM.Standard2.1 (15 GB, 1 OCPU) está seleccionada. Debajo se muestra una lista desplegable denominada Unidad de ejecutor; se ha seleccionado VM.Standard2.1 (15 GB, 1 OCPU). Debajo hay un campo de texto con la etiqueta Número de ejecutores; contiene 1. Debajo hay un campo de texto denominado Argumentos. Está atenuado y contiene ${input} ${output}. Debajo hay dos campos de texto uno junto al otro para los parámetros. El primero se denomina Nombre y aparece atenuado, pero contiene "input". El otro se denomina Valor por defecto y contiene el directorio de entrada, pero se puede editar. Hay una barra de desplazamiento a la derecha que está en la posición superior. En la parte inferior de la pantalla hay dos botones: Ejecutar y Cancelar. Se está a punto de hacer clic en Ejecutar.
  3. Si la aplicación se está ejecutando, puede cargar la IU de Spark para supervisar el progreso. En el menú Acciones de la ejecución en cuestión, seleccione IU de Spark. La página Aplicaciones con Tutorial Example 1 es la única aplicación que se muestra. Se ha hecho clic en el menú de kebab al final de la fila de la lista y se muestra Ver detalles, Editar, Ejecutar, Agregar etiquetas, Ver etiquetas y Suprimir. Se está a punto de hacer clic en IU de Spark.

  4. Se le redirigirá automáticamente a la interfaz de usuario de Apache Spark, que es útil para realizar la depuración y el ajuste del rendimiento.Interfaz de usuario de Spark con un gráfico de ejecutores, cuándo se han agregado o eliminado, y los trabajos, así como cuándo se están ejecutando y si se han ejecutado correctamente o no. Tienen una codificación con colores. Debajo se muestra una tabla con los trabajos activos, con seis columnas. Las columnas son ID de trabajo, Descripción, Ejecutado, Duración, Etapas: Finalizado correctamente/Total y Tareas (para todas las etapas): Finalizada correctamente/Total.
  5. Después de aproximadamente un minuto, la ejecución muestra la finalización correcta con el estado Succeeded: Aparece la página Ejecuciones con dos ejecuciones: Tutorial Example 1 y Tutorial Example 2. La tabla de ejecuciones tiene nueve columnas. Son Nombre, Lenguaje, Estado, Propietario, Creación, Duración, Total de OCPU, Lectura de datos y Escritura de datos. El estado de Tutorial Example 1 es Succeeded.

  6. Aumente el detalle de la ejecución para ver más información y desplácese hasta la parte inferior para ver una lista de logs. La parte inferior de la página Detalles de ejecución contiene una sección denominada Logs. Hay una tabla con cinco columnas que contiene dos archivos log. Las columnas son Nombre, Tamaño de archivo, Origen, Tipo y Creación. Hay un archivo stdout.log y un archivo stderr.log. En el menú de la izquierda a la izquierda de la sección Logs hay una sección denominada Recursos. Contiene Logs (que está resaltada porque está seleccionada) y Ejecuciones relacionadas.

  7. Al seleccionar el archivo spark_application_stdout.log.gz, verá la salida del log, Conversion was successful: Hay una página en blanco, con texto en la parte superior. El texto informa de que la conversión se ha realizado correctamente.

  8. También puede desplazarse al cubo de almacenamiento de objetos de salida para confirmar que se han creado nuevos archivos. Se muestra la sección Objetos. Hay tres botones: Cargar objetos, Restaurar y Suprimir. Solo está activo el primero. Debajo hay una tabla con cuatro columnas: Nombre, Tamaño, Estado y Creación. Se muestran los objetos disponibles.

    Las aplicaciones posteriores utilizan estos nuevos archivos. Asegúrese de que puede verlos en su cubo antes de pasar a los ejercicios siguientes.

2. SparkSQL simplificado

En este ejercicio, se ejecuta un script SQL para la creación de perfiles básicos de un juego de datos.

En este ejercicio se utiliza la salida que ha generado en 1. ETL con Java. Debe haberlo completado correctamente antes de poder probar este.

Estos pasos son para utilizar la interfaz de usuario de la consola. Puede resolver este ejercicio con spark-submit desde la CLI o spark-submit con Java SDK.

Visión general

Al igual que con otras aplicaciones de Data Flow, los archivos SQL se almacenan en el almacenamiento de objetos y se pueden compartir entre varios usuarios de SQL. Para ayudar a esto, Data Flow permite parametrizar scripts SQL y personalizarlos en tiempo de ejecución. Al igual que ocurre con otras aplicaciones, puede proporcionar valores por defecto para los parámetros que a menudo sirven como valiosas pistas para las personas que ejecutan estos scripts.

El script SQL se puede usar directamente en la aplicación Data Flow y no es necesario que cree una copia. El script se reproduce aquí para ilustrar algunos aspectos.

Texto de referencia del script de SparkSQL: Código de SparkSQL de ejemplo.

Aspectos destacados importantes:
  1. El script comienza con la creación de las tablas SQL que necesitamos. Actualmente, Data Flow no tiene un catálogo SQL persistente, por lo que todos los scripts deben empezar con la definición de las tablas que necesitan.
  2. La ubicación de la tabla se define como ${location}. Es un parámetro que el usuario debe proporcionar en tiempo de ejecución. Esto proporciona a Data Flow la flexibilidad necesaria para utilizar un script para procesar varias ubicaciones diferentes y para compartir código entre diferentes usuarios. Para este laboratorio, es necesario personalizar ${location} para que apunte a la ubicación de salida utilizada en el ejercicio 1.
  3. Como veremos, la salida del script SQL se captura y se pone a nuestra disposición en Ejecutar.
Creación de una aplicación SQL
  1. En Data Flow, cree una aplicación SQL, seleccione SQL como tipo y acepte los recursos por defecto. En la página extraíble Crear aplicación que se encuentra a la derecha de la página Aplicaciones, hay una sección denominada Configuración de aplicación. Las casillas de control, Flujo de Spark y Usar opciones de envío de Spark no están seleccionadas. Bajo una etiqueta llamada Language, hay cuatro botones de radio. SQL se ha seleccionado como lenguaje.
  2. En Configuración de la aplicación, configure la aplicación SQL de la siguiente forma:
    1. Dirección URL de archivo: es la ubicación del archivo SQL de Object Storage. La ubicación de esta aplicación es:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_sparksql_report.sql
    2. Argumentos: el script SQL espera un parámetro, la ubicación de la salida del paso anterior. Seleccione Agregar parámetro e introduzca un parámetro denominado location con el valor utilizado como ruta de acceso de salida en el paso a, según la plantilla
      oci://[bucket]@[namespace]/optimized_listings

    Cuando termine, confirme que la configuración de la aplicación tiene un aspecto similar al siguiente:

    En la página desplegable Create Application que cubre la parte derecha de la página Applications, la sección Application Configuration está visible. Hay una casilla de control, Use Spark-Submit Options, no seleccionada. En Language hay cuatro botones de radio, se selecciona SQL. Hay una sección llamada Seleccionar un archivo. En ella se selecciona la casilla de verificación, Introduzca la URL del archivo manualmente. Hay un cuadro de texto denominado Dirección URL de archivo, que contiene el enlace al archivo .sql. Debajo hay dos cuadros de texto uno junto a otro en la subsección Parámetros. El primero se denomina Nombre y contiene una ubicación. El segundo se denomina Valor y contiene la ruta a un directorio.

  3. Personalice el valor de la ubicación con una ruta de acceso válida de su arrendamiento.
Ejecución de una aplicación SQL
  1. Guardar la aplicación y ejecutarla desde la lista Aplicaciones. Página Aplicaciones con las dos aplicaciones creadas hasta ahora en este tutorial en orden cronológico inverso. Tabla que muestra las aplicaciones con cinco columnas: Nombre, Lenguaje, Propietario, Creación y Actualización. Al final de cada fila aparece un menú de kebab. En Tutorial Example 2, se ha hecho clic en el menú de kebab y se muestran las opciones. Son: Ver detalles, Editar, Ejecutar, Agregar etiquetas, Ver etiquetas y Suprimir. Se está a punto de hacer clic en Ejecutar.
  2. Una vez finalizada la ejecución, ábrala: Página Ejecuciones con las dos aplicaciones creadas hasta ahora en este tutorial en orden cronológico inverso. Cada una tiene solo una ejecución. La tabla que muestra las aplicaciones contiene nueve columnas: Nombre, Lenguaje, Estado, Propietario, Creación, Duración, Total de OCPU, Lectura de datos y Escritura de datos. El estado de Tutorial Example 2 es Succeeded y las demás celdas de la tabla están rellenas.
  3. Acceda a los logs de ejecución: Parte inferior de la página Detalles de ejecución. Debajo de los detalles hay una sección denominada Logs. En ella se muestran los archivos log disponibles en una tabla con cinco columnas. Las columnas son Nombre, Tamaño de archivo, Origen, Tipo y Creación. Los dos archivos log que se muestran son stdout.log y stderr.log. A la izquierda hay una pequeña sección denominada Recursos. Contiene dos enlaces: Logs y Recursos. Se ha seleccionado Logs.
  4. Abra spark_application_stdout.log.gz y confirme que la salida coincide con la siguiente.
    Nota

    Puede que las filas aparezcan en un orden diferente al de la imagen, pero los valores deben coincidir.
    Salida del archivo spark_application_stdout.log.gz. Hay cinco columnas de datos. Las columnas no tienen nombre y no tienen un ancho coherente. La primera columna contiene texto; las demás contienen números.
  5. En función de su función de creación de perfiles SQL, puede concluir diciendo que en este juego de datos, Neukolln tiene el precio de lista medio más bajo con 46,57 $, mientras que Charlottenburg-Wilmersdorf tiene la media más alta con 114,27 $ (Nota: El juego de datos de origen muestra los precios en USD en lugar de en EUR).

En este ejercicio se han mostrado algunos aspectos clave de Data Flow. Cuando una aplicación SQL está en su lugar, cualquier persona puede ejecutarla fácilmente sin preocuparse por la capacidad del cluster, el acceso a los datos y su retención, la gestión de credenciales u otras consideraciones de seguridad. Por ejemplo, un analista empresarial puede utilizar fácilmente los informes basados en Spark con Data Flow.

3. Machine Learning con PySpark

Utilice PySpark para realizar una tarea de Machine Learning sencilla sobre los datos de entrada.

En este ejercicio se utiliza el resultado de 1. ETL con Java como datos de entrada. Debe haber completado correctamente el primer ejercicio antes de empezar este. Esta vez, el objetivo es identificar las mejores ofertas entre varios anuncios de Airbnb utilizando algoritmos de Machine Learning de Spark.

Estos pasos son para utilizar la interfaz de usuario de la consola. Puede resolver este ejercicio con spark-submit desde la CLI o spark-submit con Java SDK.

Visión general

Puede utilizar una aplicación PySpark directamente en las aplicaciones de Data Flow. No es necesario crear una copia.

Aquí se proporciona el texto de referencia del script de PySpark para ilustrar algunos aspectos: Código PySpark de ejemplo.

Algunas observaciones sobre este código:
  1. El script de Python espera un argumento de la línea de comandos (resaltado en rojo). Cuando crea la aplicación de Data Flow, necesita crear un parámetro que el usuario definirá en la ruta de acceso de entrada.
  2. El script utiliza la regresión lineal para predecir un precio por anuncio y encuentra la mejor oferta restando el precio de lista de la predicción. El valor más negativo indica la mejor relación calidad-precio por modelo.
  3. El modelo de este script está simplificado y solo tiene en cuenta la superficie en pies cuadrados. En una configuración real, se utilizarían más variables, como el vecindario y otras variables de predictor importantes.
Creación de una aplicación PySpark

Cree una aplicación PySpark desde la consola o con spark-submit desde la línea de comandos o mediante SDK.

Machine learning con PySpark mediante la consola

Cree una aplicación PySpark en Data Flow mediante la consola.

  1. Cree una aplicación y seleccione el tipo Python.
    En la página de extracción Crear aplicación, Python se selecciona como idioma.
  2. En Configuración de la aplicación, configure la aplicación de la siguiente forma:
    1. Dirección URL de archivo: es la ubicación del archivo Python del almacenamiento de objetos. La ubicación de esta aplicación es:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py
    2. Argumentos: la aplicación Spark espera dos parámetros de línea de comandos, uno para la entrada y otro para la salida. En el campo Argumentos, introduzca
      ${location}
      . Se le solicita un valor por defecto. Introduzca el valor que se utiliza como ruta de acceso de salida en el paso a de la plantilla:
      oci://<bucket>@<namespace>/optimized_listings
  3. Vuelva a comprobar la configuración de la aplicación y confirme que es similar a lo siguiente:
    En la página desplegable Crear Aplicación que cubre la parte derecha de la página Aplicaciones, la sección Configuración de Aplicación está visible. Hay una casilla de control denominada Usar opciones de spark-submit, que no está seleccionada. Python está seleccionado como lenguaje. Hay un cuadro de texto denominado Dirección URL de archivo, que contiene el enlace al archivo .py. Debajo hay otro cuadro de texto, denominado Argumentos, que contiene ${location}. Debajo hay dos cuadros de texto uno junto a otro en la subsección Parámetros. El primero aparece atenuado y contiene "location". El segundo contiene la ruta a un directorio.
  4. Personalice el valor de la ubicación con una ruta de acceso válida del arrendamiento.
Machine learning con PySpark mediante spark-submit y la CLI

Cree una aplicación PySpark en Data Flow mediante Spark-submit y CLI.

  1. Complete el ejercicio Cree la aplicación Java mediante Spark-Submit y CLI antes de intentar este ejercicio. Los resultados se utilizan en este ejercicio.
  2. Ejecute el siguiente comando:
    oci --profile <profile-name> --auth security_token data-flow run submit \
    --compartment-id <compartment-id> \
    --display-name Tutorial_3_PySpark_ML \
    --execute '
        oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py 
        oci://<your_bucket>@<namespace-name>/output/tutorial1'
Machine learning con PySpark mediante spark-submit y el SDK

Cree una aplicación PySpark en Data Flow mediante Spark-submit y SDK.

  1. Complete el ejercicio Creación de la aplicación Java mediante Spark-Submit y SDK, antes de intentar este ejercicio. Los resultados se utilizan en este ejercicio.
  2. Ejecute el siguiente comando:
    public class PySParkMLExample {
     
      private static Logger logger = LoggerFactory.getLogger(PySParkMLExample.class);
      String compartmentId = "<compartment-id>"; // need to change comapartment id
     
      public static void main(String[] ars){
        System.out.println("ML_PySpark Tutorial");
        new PySParkMLExample().createRun();
      }
     
      public void createRun(){
     
        ConfigFileReader.ConfigFile configFile = null;
        // Authentication Using config from ~/.oci/config file
        try {
          configFile = ConfigFileReader.parseDefault();
        }catch (IOException ie){
          logger.error("Need to fix the config for Authentication ", ie);
          return;
        }
     
        try {
        AuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);
     
        DataFlowClient client = new DataFlowClient(provider);
        client.setRegion(Region.US_PHOENIX_1);
     
        String executeString = "oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py oci://<bucket-name>@<namespace-name>/output/optimized_listings";
     
        CreateRunResponse response;
     
        CreateRunDetails runDetails = CreateRunDetails.builder()
            .compartmentId(compartmentId).displayName("Tutorial_3_ML_PySpark").execute(executeString)
            .build();
     
        CreateRunRequest runRequest = CreateRunRequest.builder().createRunDetails(runDetails).build();
        CreateRunResponse response = client.createRun(runRequest);
     
        logger.info("Successful run creation for ML_PySpark with OpcRequestID: "+response.getOpcRequestId()
            +" and Run ID: "+response.getRun().getId());
     
        }catch (Exception e){
          logger.error("Exception creating run for ML_PySpark ", e);
        }
     
     
      }
    }
Ejecución de una aplicación PySpark
  1. Ejecute la aplicación desde la lista Aplicación. Página Aplicaciones con las tres aplicaciones creadas en este tutorial en orden cronológico inverso. Tabla que muestra las aplicaciones con cinco columnas: Nombre, Lenguaje, Propietario, Creación y Actualización. Al final de cada fila aparece un menú de kebab. En Tutorial Example 3, se ha hecho clic en el menú de kebab y se muestran las opciones. Son: Ver detalles, Editar, Ejecutar, Agregar etiquetas, Ver etiquetas y Suprimir. Se está a punto de hacer clic en Ejecutar.
  2. Cuando la ejecución termine, ábrala y desplácese a los logs. Parte inferior de la página Detalles de ejecución. Debajo de los detalles hay una sección denominada Logs. En ella se muestran los archivos log disponibles en una tabla con cinco columnas. Las columnas son Nombre, Tamaño de archivo, Origen, Tipo y Creación. Los dos archivos log que se muestran son stdout.log y stderr.log. A la izquierda hay una pequeña sección denominada Recursos. Contiene dos enlaces: Logs y Recursos. Se ha seleccionado Logs.

  3. Abra el archivo spark_application_stdout.log.gz. La salida debe ser idéntica a la siguiente: Salida del archivo spark_application_stdout.log.gz. Hay una tabla con seis columnas. Son ID, Nombre, Funciones, Precio, Predicción y Valor. Solo se muestran las veinte primeras filas. Todas las celdas están rellenas.
  4. En esta salida ve que el ID de anuncio 690578 es la mejor oferta con un precio previsto de 313,70 $ en comparación con el precio de lista de 35,00 $ con una superficie en pies cuadrados de 4.639 pies cuadrados. Si suena demasiado bien como para ser verdad, el ID único significa que puede profundizar en los datos para comprender mejor si se trata a ciencia cierta del trato del siglo. De nuevo, un analista de negocio sin duda podría utilizar la salida de este algoritmo de Machine Learning para un análisis más detallado.

Siguiente paso

Ahora puede crear y ejecutar aplicaciones de Java, Python o SQL con Data Flow y explorar los resultados.

Data Flow gestiona todos los detalles del despliegue, el desmontaje, la gestión de logs, la seguridad y el acceso a la interfaz de usuario. Con Data Flow, se centra en el desarrollo de aplicaciones Spark sin preocuparse por la infraestructura.