Nota:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a Oracle Cloud Infrastructure Free Tier.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Procese archivos de gran tamaño en Autonomous Database y Kafka con Oracle Cloud Infrastructure Data Flow
Introducción
Oracle Cloud Infrastructure (OCI) Data Flow es un servicio totalmente gestionado para ejecutar aplicaciones Apache Spark TM. Data Flow se utiliza para procesar archivos grandes, flujos y operaciones de base de datos, y puede crear muchas aplicaciones con un procesamiento ampliable muy alto. Apache Spark puede ampliar y utilizar máquinas en cluster para crear paralelismos de trabajos con una configuración mínima.
Con Apache Spark como servicio gestionado (Data Flow), puede agregar muchos servicios escalables para multiplicar la potencia del procesamiento en la nube y en este tutorial se muestra cómo utilizar:
- Almacenamiento de objetos: como repositorio de archivos de bajo costo y ampliable
- Autonomous Database: como base de datos escalable en la nube
- Transmisión: como servicio gestionado de Kafka altamente escalable
En este tutorial, puede ver las actividades más comunes utilizadas para procesar archivos grandes, consultar la base de datos y fusionar/unir los datos para formar otra tabla en la memoria. Puede escribir estos datos masivos en su base de datos y en una cola de Kafka con un costo muy bajo y alto rendimiento.
Objetivos
- Descubra cómo se puede utilizar Data Flow para procesar una gran cantidad de datos
- Aprenda a integrar servicios escalables: repositorio de archivos, base de datos y cola
Requisitos
-
Un inquilino operativo de Oracle Cloud: puede crear una cuenta gratuita de Oracle Cloud con $ 300.00 durante un mes para probar este tutorial. Consulte Creación de una cuenta gratuita de Oracle Cloud
-
CLI de OCI (interfaz de línea de comandos de Oracle Cloud) instalada en la máquina local: este es el enlace para instalar la CLI de OCI.
-
Una aplicación Apache Spark instalada en la máquina local. Consulte Desarrollo local de aplicaciones de Oracle Cloud Infrastructure Data Flow y despliegue en la nube para conocer cómo realizar el desarrollo local y en Data Flow.
Nota: Esta es la página oficial que se va a instalar: Apache Spark. Existen procedimientos alternativos para instalar Apache Spark para cada tipo de sistema operativo (Linux/Mac OS/Windows).
-
CLI de envío de Spark instalado. Este es el enlace para instalar Spark Submit CLI.
-
Maven instalado en la máquina local.
-
Conocimientos de los conceptos de OCI:
- Compartimentos
- Políticas de IAM
- arrendamiento
- OCID de los recursos
Tarea 1: Creación de la estructura de Object Storage
El almacenamiento de objetos se utilizará como repositorio de archivos por defecto. Puede utilizar otro tipo de repositorios de archivos, pero el almacenamiento de objetos es una forma sencilla y de bajo costo de manipular los archivos con rendimiento. En este tutorial, ambas aplicaciones cargarán un archivo CSV de gran tamaño del almacenamiento de objetos y mostrarán cómo Apache Spark es rápido e inteligente para procesar un gran volumen de datos.
-
Crear un compartimento: los compartimentos son importantes para organizar y aislar sus recursos en la nube. Puede aislar sus recursos mediante políticas de IAM.
-
Puede utilizar este enlace para comprender y configurar las políticas de los compartimentos: Gestión de compartimentos
-
Cree un compartimento para alojar todos los recursos de las 2 aplicaciones de este tutorial. Cree un compartimento denominado analytics.
-
Vaya al menú principal de Oracle Cloud y busque: Identidad y seguridad, Compartimentos. En la sección Compartimentos, haga clic en Crear compartimento e introduzca el nombre.
Nota: Debe otorgar acceso a un grupo de usuarios e incluir el usuario.
-
Haga clic en Crear compartimento para incluir el compartimento.
-
-
Cree su cubo en Object Storage: los cubos son contenedores lógicos para almacenar objetos, por lo que todos los archivos utilizados para esta demostración se almacenarán en este cubo.
-
Vaya al menú principal de Oracle Cloud y busque Almacenamiento y Cubos. En la sección Cubos, seleccione el compartimento (análisis), creado anteriormente.
-
Haga clic en Crear cubo. Cree 4 cubos: aplicaciones, datos, logs de flujo de datos, cartera
-
Introduzca la información de Nombre de cubo con estos 4 cubos y mantenga los demás parámetros con la selección por defecto.
-
Para cada cubo, haga clic en Crear. Puede ver los cubos creados.
-
Nota: Revise las políticas de IAM para el bloque. Debe configurar las políticas si desea utilizar estos cubos en sus aplicaciones de demostración. Puede revisar los conceptos y configurar aquí Visión general de Object Storage y Políticas de IAM.
Tarea 2: Creación de Autonomous Database
Oracle Cloud Autonomous Database es un servicio gestionado para Oracle Database. Para este tutorial, las aplicaciones se conectarán a la base de datos a través de una cartera por motivos de seguridad.
-
Instancie Autonomous Database como se describe aquí: Aprovisionamiento de Autonomous Database.
-
En el menú principal de Oracle Cloud, seleccione la opción Almacén de datos, seleccione Oracle Database y Autonomous Data Warehouse; seleccione su compartimento análisis y siga el tutorial para crear la instancia de base de datos.
-
Asigne a la instancia el nombre Logs procesados, seleccione logs como nombre de base de datos y no necesita cambiar ningún código en las aplicaciones.
-
Introduzca la contraseña de administrador y descargue el archivo zip de cartera.
-
Después de crear la base de datos, puede configurar la contraseña de usuario ADMIN y descargar el archivo zip de cartera.
-
Guarde el archivo zip de cartera (
Wallet_logs.zip
) y anote la contraseña ADMIN, deberá configurar el código de aplicación. -
Vaya a Almacenamiento, Cubos. Cambie al compartimento analytics y verá el cubo Wallet. Haga clic en él.
-
Para cargar el archivo zip de cartera, haga clic en Cargar y adjunte el archivo Wallet_logs.zip.
Nota: Revise las políticas de IAM para acceder a Autonomous Database aquí: Política de IAM para Autonomous Database
Tarea 3: Cargar los archivos de ejemplo CSV
Para demostrar la potencia de Apache Spark, las aplicaciones leerán un archivo CSV con 1.000.000 líneas. Estos datos se insertarán en la base de datos de Autonomous Data Warehouse con una sola línea de comandos y se publicarán en un flujo de Kafka (Oracle Cloud Streaming). Todos estos recursos son ampliables y perfectos para un gran volumen de datos.
-
Descargue estos 2 enlaces y cárguelos en el cubo de datos:
-
Nota:
- organizations.csv solo tiene 100 líneas, solo para probar las aplicaciones en su máquina local.
- organizations1M.csv contiene 1 000 000 líneas y se utilizará para ejecutarse en la instancia de Data Flow.
-
En el menú principal de Oracle Cloud, vaya a Almacenamiento y Cubos. Haga clic en el cubo de datos y cargue los 2 archivos del paso anterior.
-
Cargar una tabla auxiliar en la base de datos de ADW
-
Descargue este archivo para cargarlo en la base de datos de ADW: GDP PER CAPTA COUNTRY.csv
-
En el menú principal de Oracle Cloud, seleccione Oracle Database y Autonomous Data Warehouse.
-
Haga clic en la instancia Logs procesados para ver los detalles.
-
Haga clic en Acciones de base de datos para ir a las utilidades de la base de datos.
-
Introduzca las credenciales para el usuario ADMIN.
-
Haga clic en la opción SQL para ir a Utilidades de consulta.
-
Haga clic en Carga de datos.
-
Borre el archivo GDP PER CAPTA COUNTRY.csv en el panel de la consola y continúe con la importación de los datos en una tabla.
-
Puede ver la nueva tabla denominada GDPPERCAPTA importada correctamente.
Tarea 4: Creación de un almacén secreto para la contraseña ADW ADMIN
Por motivos de seguridad, la contraseña ADW ADMIN se guardará en un almacén. Oracle Cloud Vault puede alojar esta contraseña con seguridad y se puede acceder a ella en la aplicación con la autenticación de OCI.
-
Cree el secreto en un almacén como se describe en la siguiente documentación: Agregar la contraseña de administrador de la base de datos al almacén
-
Cree una variable denominada PASSWORD_SECRET_OCID en las aplicaciones e introduzca el OCID.
Nota: Revise la política de IAM para OCI Vault aquí: Política de IAM de OCI Vault.
Tarea 5: Creación de una transmisión de Kafka con el servicio Oracle Cloud Streaming
Oracle Cloud Streaming es un servicio de transmisión gestionada similar a Kafka. Puede desarrollar aplicaciones con las API de Kafka y los SDK comunes. En este tutorial, creará una instancia de Streaming y la configurará para que se ejecute en ambas aplicaciones con el fin de publicar y consumir un gran volumen de datos.
-
En el menú principal de Oracle Cloud, vaya a Análisis e IA, Flujos.
-
Cambie el compartimento a analytics. Se crearán todos los recursos de esta demostración en este compartimento. IAM es más seguro y fácil de controlar.
-
Haga clic en Crear flujo.
-
Introduzca el nombre como kafka_like (por ejemplo) y puede mantener todos los demás parámetros con los valores predeterminados.
-
Haga clic en Crear para inicializar la instancia.
-
Espere el estado Activo. Ahora puede utilizar la instancia.
Nota: En el proceso de creación de flujo, puede seleccionar la opción Crear automáticamente un pool de flujos por defecto para crear automáticamente el pool por defecto.
-
Haga clic en el enlace DefaultPool.
-
Visualice la configuración de conexión.
-
Anote esta información, ya que la necesitará en el siguiente paso.
Nota: Revise las políticas de IAM para OCI Streaming aquí: Política de IAM para OCI Streaming.
Tarea 6: Generación de un TOKEN AUTH para acceder a Kafka
Puede acceder a OCI Streaming (API de Kafka) y a otros recursos en Oracle Cloud con un token de autenticación asociado a su usuario en OCI IAM. En la configuración de conexión de Kafka, las cadenas de conexión SASL tienen un parámetro denominado password y un valor AUTH_TOKEN, como se describe en la tarea anterior. Para permitir el acceso a OCI Streaming, debe ir a su usuario en la consola de OCI y crear un TOKEN AUTH.
-
En el menú principal de Oracle Cloud, vaya a Identidad y seguridad, Usuarios.
Nota: Recuerde que el usuario que necesita para crear AUTH TOKEN es el usuario configurado con la CLI de OCI y toda la configuración de Políticas de IAM para los recursos creados hasta ahora. Los recursos son:
- Oracle Cloud Autonomous Data Warehouse
- Transmisión de Oracle Cloud
- Almacenamiento de objetos de Oracle
- Flujo de datos de Oracle
-
Haga clic en su nombre de usuario para ver los detalles.
-
Haga clic en la opción Tokens de autenticación en la parte izquierda de la consola y haga clic en Generar token.
Nota: El token solo se generará en este paso y no estará visible una vez completado el paso. Por lo tanto, copie el valor y guárdelo. Si pierde el valor del token, debe volver a generar el token de autenticación.
Tarea 7: Configuración de las aplicaciones de demostración
Este tutorial tiene 2 aplicaciones de demostración para las que configuraremos la información necesaria:
-
Java-CSV-DB: esta aplicación leerá 1.000.000 líneas de un archivo csv (organizations1M.csv) y ejecutará algunos procesos habituales en un escenario común para la integración con una base de datos (Oracle Cloud Autonomous Data Warehouse) y un flujo de Kafka (Oracle Cloud Streaming).
La demostración muestra cómo un conjunto de datos CSV se puede combinar con una tabla auxiliar en la base de datos y cruzar los tipos de tablas que generan un tercer conjunto de datos en la memoria. Después de la ejecución, el juego de datos se insertará en ADW y se publicará en el flujo de Kafka.
-
JavaConsumeKafka: esta aplicación repetirá algunos pasos de la primera aplicación solo para tomar CPU y memoria para un gran volumen de procesamiento. La diferencia es que la primera aplicación publica en el flujo de Kafka, mientras que esta aplicación lee del flujo.
-
Descargue las aplicaciones mediante los siguientes enlaces:
-
Busque los siguientes detalles en la consola de Oracle Cloud:
-
Espacio de nombres de arrendamiento
-
Secreto de contraseña
-
Configuración de conexión de flujo
-
Token de autenticación
-
-
Abra los archivos zip descargados (
Java-CSV-DB.zip
yJavaConsumeKafka.zip
). Vaya a la carpeta /src/main/java/example y busque el código Example.java.-
Estas son las variables que se deben cambiar con los valores de recursos de su arrendamiento.
NOMBRE DE VARIABLE NOMBRE DE RECURSO TÍTULO DE INFORMACIÓN NAMESPACE ESPACIO DE NOMBRES DE ARRENDAMIENTO ARRENDAMIENTO OBJECT_STORAGE_NAMESPACE ESPACIO DE NOMBRES DE ARRENDAMIENTO ARRENDAMIENTO PASSWORD_SECRET_OCID PASSWORD_SECRET_OCID OCID streamPoolId Configuración de conexión de flujo Valor ocid1.streampool.oc1.iad..... en la cadena de conexión SASL kafkaUsername Configuración de conexión de flujo valor de nombre de usuario dentro de " " en cadena de conexión SASL kafkaPassword Token de autenticación El valor solo se muestra en el paso de creación
-
Nota: Todos los recursos creados para este tutorial están en la región US-ASHBURN-1. Proteja la región que desea que funcione. Si cambia la región, debe cambiar los siguientes detalles en los 2 archivos de código:
Example.java: cambie la variable bootstrapServers, sustituyendo "us-ashburn-1" por la nueva región.
OboTokenClientConfigurator.java: cambie la variable CANONICAL_REGION_NAME con la nueva región.
Tarea 8: Descripción del código Java
Este tutorial se creó en Java y este código se puede transferir también a Python. El tutorial está dividido en 2 partes:
-
Aplicación 1 para publicar en Kafka Streaming
-
Aplicación 2 para consumir de Kafka Streaming
Para demostrar la eficiencia y escalabilidad, ambas aplicaciones se desarrollaron para mostrar algunas posibilidades en un caso de uso común de un proceso de integración. Por lo tanto, el código para ambas aplicaciones muestra los siguientes ejemplos:
-
Leer un archivo CSV con 1.000.000 líneas
-
Preparar la cartera de ADW para conectarse a través de una conexión JDBC
-
Inserte 1.000.000 líneas de datos CSV en la base de datos de ADW
-
Ejecutar una sentencia SQL para consultar una tabla ADW
-
Ejecutar una sentencia SQL para JOIN a un juego de datos CSV con una tabla de juego de datos de ADW
-
Realice un bucle del conjunto de datos CSV para demostrar una iteración con los datos
-
Opere con Kafka Streaming
Esta demostración se puede ejecutar en la máquina local y se puede desplegar en la instancia de Data Flow para ejecutarla como un trabajo.
Nota: Para el trabajo Data Flow y la máquina local, utilice la configuración de la CLI de OCI para acceder a los recursos de OCI. En Data Flow, todo está preconfigurado, por lo que no es necesario cambiar los parámetros. En la máquina local, instale la CLI de OCI y configure el inquilino, el usuario y la clave privada para acceder a sus recursos de OCI.
Vamos a mostrar el código Example.java
en las secciones:
-
Inicialización de Apache Spark: esta parte del código representa la inicialización de Spark. La mayoría de las configuraciones para realizar los procesos de ejecución se configuran automáticamente, por lo que es muy fácil trabajar con el motor de Spark.
-
Leer un archivo grande en muchos formatos: el motor Apache Spark y el SDK permiten una carga rápida y escribir formatos de archivo. Un volumen alto se puede manipular en segundos e incluso milisegundos. Por lo tanto, puede combinar, filtrar y unir conjuntos de datos en la memoria y manipular diferentes orígenes de datos.
-
Lea el secreto de ADW Vault: esta parte del código accede al almacén para obtener el secreto de la instancia de ADW.
-
Lea el archivo
Wallet.zip
para conectarse a través de JDBC: esta sección muestra cómo cargar el archivoWallet.zip
desde Object Storage y configurar el controlador JDBC. -
Inserte 1.000.000 líneas de conjunto de datos CSV en la base de datos de ADW: desde el conjunto de datos CSV, es posible insertar por lotes en la base de datos de ADW directamente. Apache Spark puede optimizar la ejecución utilizando toda la potencia de las máquinas agrupadas en clusters, las CPU y la memoria para obtener el mejor rendimiento.
-
Transformación de datos: imagine cargar muchos archivos CSV, consultar algunas tablas en la base de datos en juegos de datos, JOIN, filtrar, eliminar columnas, calcular y muchas otras operaciones en algunas líneas de código, en una fracción de tiempo y realizar una operación de escritura en cualquier formato. En este ejemplo, se creó un nuevo conjunto de datos denominado oracleDF2 a partir de un conjunto de datos CSV y un conjunto de datos de ADW Database.
-
Iterar con un conjunto de datos en un bucle: este es un ejemplo de iteración de bucle sobre el conjunto de datos CSV (1.000.000 líneas). El objeto row contiene la asignación de la estructura de campos CSV. Por lo tanto, puede obtener los datos de cada línea y ejecutar llamadas de API y muchas otras operaciones.
-
Operaciones de Kafka: esta es la preparación para conectarse a OCI Streaming mediante la API de Kafka.
Nota: Oracle Cloud Streaming es compatible con la mayoría de las API de Kafka.
-
Después de configurar los parámetros de conexión, el código muestra cómo producir y consumir el flujo.
Tarea 9: Empaquetar la aplicación con Maven
Antes de ejecutar el trabajo en Apache Spark, es necesario empaquetar la aplicación con Maven. Maven es una de las utilidades más conocidas para empaquetar aplicaciones con bibliotecas y plugins.
Nota:
Puede ejecutar una prueba rápida cambiando el archivo CSV con otra solo con 100 líneas. Para ello, solo localice el siguiente código en el archivo Example.java: private static String INPUT_PATH = "oci://data@" + OBJECT_STORAGE_NAMESPACE + "/organizations1M.csv";
Sustituya
organizations1M.csv
pororganizations.csv
y la ejecución será mucho más rápida.
-
Paquete Java-CSV-DB
-
Vaya a la carpeta /Java-CSV-DB y ejecute este comando:
mvn package
-
Puede ver Maven iniciando el empaquetado.
-
Si todo es correcto, puede ver el mensaje Correcto.
-
Para probar la aplicación en la máquina de Apache Spark local, ejecute este comando:
spark-submit --class example.Example target/loadadw-1.0-SNAPSHOT.jar
-
-
Paquete JavaConsumeKafka
-
Vaya a la carpeta /JavaConsumeKafka y ejecute este comando:
mvn package
-
Puede ver Maven iniciando el empaquetado.
-
Si todo es correcto, puede ver el mensaje Correcto.
-
Para probar la aplicación en la máquina de Apache Spark local, ejecute este comando:
spark-submit --class example.Example target/loadkafka-1.0-SNAPSHOT.jar
-
Tarea 10: Verificar la ejecución
-
Confirmar Inserciones de ADW
-
Vaya al menú principal de Oracle Cloud, seleccione Oracle Database y Autonomous Data Warehouse.
-
Haga clic en la instancia Logs procesados para ver los detalles.
-
Haga clic en Acciones de base de datos para ir a las utilidades de la base de datos.
-
Introduzca las credenciales para el usuario ADMIN.
-
Haga clic en la opción SQL para ir a Utilidades de consulta.
-
Ejecute una consulta para ver las 1.000.000 líneas de la tabla.
-
-
Confirmar logs de ejecución
-
Puede ver en los logs de ejecución si el trabajo puede acceder a los juegos de datos y cargarlos.
-
Tarea 11: Creación y ejecución de un trabajo de flujo de datos
Ahora, con ambas aplicaciones ejecutándose correctamente en su máquina local de Apache Spark, puede desplegarlas en el flujo de datos de Oracle Cloud de su arrendamiento.
-
En el menú principal de Oracle Cloud, vaya a Análisis e IA y Flujo de datos.
-
Asegúrese de seleccionar el compartimento análisis antes de crear una aplicación de flujo de datos.
-
Haga clic en Crear aplicación.
-
Complete los parámetros como se muestra en la siguiente imagen:
-
Haga clic en Crear.
-
Después de la creación, haga clic en el enlace Ampliar demostración para ver los detalles.
-
Haga clic en Ejecutar para ejecutar el trabajo.
-
Confirme los parámetros y vuelva a hacer clic en Ejecutar.
-
Vea el estado del trabajo, espere hasta que el estado cambie a Correcto y puede ver los resultados.
Pasos Siguientes
La primera aplicación publica datos en Kafka Streaming. La segunda aplicación consume estos datos de Kafka.
-
Cree otra aplicación de flujo de datos mediante los mismos pasos al crear la primera aplicación de flujo de datos.
-
Debe cambiar el nombre de la aplicación y cambiar el paquete, de loadadw-1.0-SNAPSHOT.jar a loadkafka-1.0-SNAPSHOT.jar.
-
Puede conservar los otros parámetros para que sean los mismos que la primera aplicación Data Flow y ejecutar el trabajo.
Enlaces relacionados
-
Desarrollo local de aplicaciones de Oracle Cloud Infrastructure Data Flow y despliegue en la nube
-
Agregar la contraseña del administrador de la base de datos al almacén
Agradecimientos
- Autor: Cristiano Hoshikawa (Ingeniero de soluciones LAD A-Team)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Process large files in Autonomous Database and Kafka with Oracle Cloud Infrastructure Data Flow
F79141-01
March 2023
Copyright © 2023, Oracle and/or its affiliates.