Ingesta de datos por lotes en Amazon OpenSearch Service mediante AWS Glue

Como
Gustó

Fecha:

Las organizaciones trabajan constantemente para procesar y analizar grandes volúmenes de datos y obtener información útil. Las capacidades de búsqueda e ingesta de datos efectivas se han vuelto esenciales para casos de uso como análisis de registros, búsqueda de aplicaciones y búsqueda empresarial. Estos casos de uso exigen una canalización sólida que pueda manejar grandes volúmenes de datos y permitir una exploración de datos eficiente.

Apache Spark, una potente herramienta de código abierto para el procesamiento de datos a gran escala, es ampliamente reconocida por su velocidad, escalabilidad y facilidad de uso. Su capacidad para procesar y transformar conjuntos de datos masivos la ha convertido en una herramienta indispensable en la ingeniería de datos moderna. Servicio Amazon OpenSearch—una solución de búsqueda y análisis impulsada por la comunidad— permite a las organizaciones buscar, agregar, visualizar y analizar datos sin inconvenientes. Juntos, Spark y OpenSearch Service ofrecen una solución atractiva para crear potentes canales de datos. Sin embargo, la ingesta de datos de Spark en OpenSearch Service puede presentar desafíos, especialmente con diversas fuentes de datos.

Esta publicación muestra cómo usar Spark en Pegamento AWS para ingerir datos sin problemas en el servicio OpenSearch. Abordamos métodos de ingestión por lotes, compartimos ejemplos prácticos y analizamos las mejores prácticas para ayudarlo a crear canales de datos optimizados y escalables en AWS.

Resumen de la solución

AWS Glue es un servicio de integración de datos sin servidor que simplifica las tareas de preparación e integración de datos para análisis, aprendizaje automático y desarrollo de aplicaciones. En esta publicación, nos centramos en la ingesta de datos por lotes en OpenSearch Service mediante Spark en AWS Glue.

AWS Glue ofrece múltiples opciones de integración con OpenSearch Service utilizando varias bibliotecas de código abierto y administradas por AWS, que incluyen:

En las siguientes secciones, exploramos cada método de integración en detalle y lo guiamos a través de la configuración y la implementación. A medida que avanzamos, construimos de manera incremental el diagrama de arquitectura que se muestra en la siguiente figura, lo que proporciona una ruta clara para crear canales de datos sólidos en AWS. Cada implementación es independiente de las demás. Elegimos mostrarlas por separado porque, en un escenario del mundo real, es probable que solo se utilice uno de los tres métodos de integración.

Imagen que muestra el diagrama de arquitectura de alto nivel

Puede encontrar el código base en el archivo adjunto. Repositorio GitHubEn las siguientes secciones, repasaremos los pasos para implementar la solución.

Requisitos previos

Antes de implementar esta solución, asegúrese de que se cumplan los siguientes requisitos previos:

Clonar el repositorio en su máquina local

Clona el repositorio en tu máquina local y configura el BLOG_DIR variable de entorno. Todas las rutas relativas asumen BLOG_DIR se establece en la ubicación del repositorio en su máquina. Si BLOG_DIR No se está utilizando, ajuste la ruta en consecuencia.

git clone git@github.com:aws-samples/opensearch-glue-integration-patterns.git
cd opensearch-glue-integration-patterns
export BLOG_DIR=$(pwd)

Implemente la plantilla AWS CloudFormation para crear la infraestructura necesaria

El objetivo principal de esta publicación es demostrar cómo usar las bibliotecas mencionadas en Spark en AWS Glue para ingerir datos en OpenSearch Service. Aunque nos centramos en este tema central, será necesario aprovisionar previamente varios componentes clave de AWS para los ejemplos de integración, como un Nube privada virtual de Amazon (VPC de Amazon), múltiples Subredes, un Servicio de administración de claves de AWS Clave (AWS KMS), una Servicio de almacenamiento simple de Amazon (Amazon S3), una función de AWS Glue y un clúster de OpenSearch Service con dominios para OpenSearch Service y Elasticsearch. Para simplificar la configuración, hemos automatizado el aprovisionamiento de esta infraestructura central mediante cloudformation/opensearch-glue-infrastructure.yaml Formación en la nube de AWS plantilla.

  1. Ejecute los siguientes comandos

La plantilla de CloudFormation implementará los componentes de red necesarios (como VPC y subredes), Reloj en la nube de Amazon Registro, rol de AWS Glue y dominios de OpenSearch Service y Elasticsearch necesarios para implementar la arquitectura propuesta. Use una contraseña segura (8 a 128 caracteres, tres de los cuales deben ser minúsculas, mayúsculas, números o caracteres especiales, y no debe contener /, “ ni espacios) y cumpla con los estándares de seguridad de su organización para ESMasterUserPassword y OSMasterUserPassword en el siguiente comando:

cd ${BLOG_DIR}/cloudformation/
aws cloudformation deploy 
--template-file ${BLOG_DIR}/cloudformation/opensearch-glue-infrastructure.yaml 
--stack-name GlueOpenSearchStack 
--capabilities CAPABILITY_NAMED_IAM 
--region <AWS_REGION> 
--parameter-overrides 
ESMasterUserPassword=<ES_MASTER_USER_PASSWORD> 
OSMasterUserPassword=<OS_MASTER_USER_PASSWORD>

Debería ver un mensaje de éxito como "Successfully created/updated stack – GlueOpenSearchStack" Una vez que los recursos se hayan aprovisionado correctamente, el aprovisionamiento de esta pila de CloudFormation suele tardar aproximadamente 30 minutos en completarse.

  1. En la consola de AWS CloudFormation, busque el GlueOpenSearchStack apilar y confirmar que su estado es CREAR_COMPLETO.

Imagen que muestra el estado "CREATE_COMPLETE" de la plantilla de CloudFormation

Puede revisar los recursos implementados en el Recursos pestaña, como se muestra en la siguiente captura de pantalla. La captura de pantalla no muestra todos los recursos creados.

Imagen que muestra la pestaña "Recursos" de la plantilla de CloudFormation

Pasos de configuración adicionales

En esta sección, recopilamos información esencial, incluido el nombre del depósito S3 y los puntos finales del servicio OpenSearch y del dominio Elasticsearch. Estos detalles son necesarios para ejecutar el código en las secciones posteriores.

Capturar los detalles de los recursos aprovisionados

Utilice el siguiente comando de AWS CLI para extraer y guardar los valores de salida de la pila de CloudFormation en un archivo llamado GlueOpenSearchStack_outputs.txtHaremos referencia a los valores de este archivo en los próximos pasos.

aws cloudformation describe-stacks 
--stack-name GlueOpenSearchStack 
--query 'sort_by(Stacks[0].Outputs[], &OutputKey)[].{Key:OutputKey,Value:OutputValue}' 
--output table 
--no-cli-pager 
--region <AWS_REGION> > ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt

Descargue el conjunto de datos de NY Green Taxi de diciembre de 2022 y cópielo en el depósito S3

El propósito de esta publicación es demostrar la implementación técnica de la ingesta de datos en OpenSearch Service mediante AWS Glue. No es esencial comprender el conjunto de datos en sí, excepto su formato de datos, que analizamos en los cuadernos de AWS Glue en secciones posteriores. Para obtener más información sobre el conjunto de datos, puede encontrar información adicional en Sitio web de la Comisión de Taxis y Limusinas de la Ciudad de Nueva York.

Le solicitamos específicamente que descargue el conjunto de datos de diciembre de 2022, porque hemos probado la solución utilizando este conjunto de datos en particular:

S3_BUCKET_NAME=$(awk -F '|' '$2 ~ /S3Bucket/ {gsub(/^[ t]+|[ t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt)
mkdir -p ${BLOG_DIR}/datasets && cd ${BLOG_DIR}/datasets
curl -O https://d37ci6vzurychx.cloudfront.net/trip-data/green_tripdata_2022-12.parquet
aws s3 cp green_tripdata_2022-12.parquet s3://${S3_BUCKET_NAME}/datasets/green_tripdata_2022-12.parquet

Descargue los JAR necesarios del repositorio Maven y cópielos al depósito S3

Hemos especificado una versión particular del archivo JAR para garantizar una experiencia de implementación estable. Sin embargo, recomendamos cumplir con las prácticas recomendadas de seguridad de su organización y revisar las vulnerabilidades conocidas en la versión de los archivos JAR antes de la implementación. AWS no garantiza la seguridad de ningún código de fuente abierta utilizado aquí. Además, verifique la suma de comprobación del archivo JAR descargado con el valor publicado para confirmar su integridad y autenticidad.

mkdir -p ${BLOG_DIR}/jars && cd ${BLOG_DIR}/jars
# OpenSearch Service jar
curl -O https://repo1.maven.org/maven2/org/opensearch/client/opensearch-spark-30_2.12/1.0.1/opensearch-spark-30_2.12-1.0.1.jar
aws s3 cp opensearch-spark-30_2.12-1.0.1.jar s3://${S3_BUCKET_NAME}/jars/opensearch-spark-30_2.12-1.0.1.jar
# Elasticsearch jar
curl -O https://repo1.maven.org/maven2/org/elasticsearch/elasticsearch-spark-30_2.12/7.17.23/elasticsearch-spark-30_2.12-7.17.23.jar
aws s3 cp elasticsearch-spark-30_2.12-7.17.23.jar s3://${S3_BUCKET_NAME}/jars/elasticsearch-spark-30_2.12-7.17.23.jar

En las siguientes secciones, implementamos los métodos de ingesta de datos individuales como se describe en el diagrama de arquitectura.

Ingerir datos en el servicio OpenSearch utilizando la biblioteca OpenSearch Spark

En esta sección, cargamos un índice de OpenSearch Service usando Spark y el Biblioteca Spark de OpenSearchDemostramos esta implementación mediante el uso de cuadernos de AWS Glue, empleando Autenticación básica mediante nombre de usuario y contraseña.

Para demostrar los mecanismos de ingestión, hemos proporcionado la Spark-and-OpenSearch-Code-Steps.ipynb Cuaderno con instrucciones detalladas. Siga los pasos de esta sección junto con las instrucciones del cuaderno.

Configurar el cuaderno de AWS Glue Studio

Complete los siguientes pasos:

  1. En la consola de AWS Glue, elija Empleos de ETL en el panel de navegación.
  2. bajo Crear trabajo, escoger Notebook.

Imagen que muestra la página de la consola de AWS para que AWS Glue abra el cuaderno

  1. Sube el archivo del cuaderno ubicado en ${BLOG_DIR}/glue_jobs/Spark-and-OpenSearch-Code-Steps.ipynb.
  2. Para Rol de IAM, elija la función IAM del trabajo de AWS Glue que comienza con GlueOpenSearchStack-GlueRole-*.

Imagen que muestra la página de la consola de AWS para que AWS Glue abra el cuaderno

  1. Introduzca un nombre para el cuaderno (por ejemplo, Spark-and-OpenSearch-Code-Steps) y elige Guardar.

Imagen que muestra el cuaderno OpenSearch de AWS Glue

Reemplazar los valores de marcador de posición en el cuaderno

Complete los siguientes pasos para actualizar los marcadores de posición en el cuaderno:

  1. En el paso 1 del cuaderno, reemplace el marcador de posición con el nombre de conexión de la sesión interactiva de AWS Glue. Puede obtener el nombre de la sesión interactiva ejecutando el siguiente comando:
cd ${BLOG_DIR}
awk -F '|' '$2 ~ /GlueInteractiveSessionConnectionName/ {gsub(/^[ t]+|[ t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt

  1. En el paso 1 del cuaderno, reemplace el marcador de posición y rellenar la variable s3_bucket con el nombre del depósito. Puede obtener el nombre del depósito S3 ejecutando el siguiente comando:
awk -F '|' '$2 ~ /S3Bucket/ {gsub(/^[ t]+|[ t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt

  1. En el paso 4 del cuaderno, reemplace con el nombre de dominio del servicio OpenSearch. Puede obtener el nombre de dominio ejecutando el siguiente comando:
awk -F '|' '$2 ~ /OpenSearchDomainEndpoint/ {gsub(/^[ t]+|[ t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt

ejecutar el cuaderno

Ejecute cada celda del cuaderno para cargar datos en el dominio del servicio OpenSearch y léala nuevamente para verificar que la carga se haya realizado correctamente. Consulte las instrucciones detalladas dentro del cuaderno para obtener orientación específica sobre la ejecución.

Modos de escritura de Spark (agregar o sobrescribir)

Se recomienda escribir datos de forma incremental en los índices del Servicio OpenSearch utilizando el append modo, como se muestra en el paso 8 en el cuaderno. Sin embargo, en ciertos casos, es posible que deba actualizar todo el conjunto de datos en el índice de OpenSearch Service. En estos escenarios, puede utilizar el overwrite modo, aunque no se recomienda para índices grandes. Al utilizar overwrite En el modo de preprocesamiento, la biblioteca Spark elimina filas del índice de OpenSearch Service una por una y luego reescribe los datos, lo que puede resultar ineficiente para conjuntos de datos grandes. Para evitar esto, puede implementar un paso de preprocesamiento en Spark para identificar inserciones y actualizaciones, y luego escribir los datos en OpenSearch Service usando append modo.

Ingerir datos en Elasticsearch utilizando la biblioteca Hadoop de Elasticsearch

En esta sección, cargamos un índice Elasticsearch usando Spark y el Biblioteca Hadoop de ElasticsearchDemostramos esta implementación utilizando AWS Glue como motor para Spark.

Configurar el cuaderno de AWS Glue Studio

Complete los siguientes pasos para configurar el portátil:

  1. En la consola de AWS Glue, elija Empleos de ETL en el panel de navegación.
  2. bajo Crear trabajo, escoger Notebook.

Imagen que muestra la página de la consola de AWS para que AWS Glue abra el cuaderno

  1. Sube el archivo del cuaderno ubicado en ${BLOG_DIR}/glue_jobs/Spark-and-Elasticsearch-Code-Steps.ipynb.
  2. Para Rol de IAM, elija la función IAM del trabajo de AWS Glue que comienza con GlueOpenSearchStack-GlueRole-*.

Imagen que muestra la página de la consola de AWS para que AWS Glue abra el cuaderno

  1. Introduzca un nombre para el cuaderno (por ejemplo, Spark-and-ElasticSearch-Code-Steps) y elige Guardar.

Imagen que muestra el cuaderno Elasticsearch de AWS Glue

Reemplazar los valores de marcador de posición en el cuaderno

Complete los siguientes pasos:

  1. En el paso 1 del cuaderno, reemplace el marcador de posición con el nombre de conexión de la sesión interactiva de AWS Glue. Puede obtener el nombre de la sesión interactiva ejecutando el siguiente comando:
awk -F '|' '$2 ~ /GlueInteractiveSessionConnectionName/ {gsub(/^[ t]+|[ t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt

  1. En el paso 1 del cuaderno, reemplace el marcador de posición y rellenar la variable s3_bucket con el nombre del depósito. Puede obtener el nombre del depósito S3 ejecutando el siguiente comando:
awk -F '|' '$2 ~ /S3Bucket/ {gsub(/^[ t]+|[ t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt

  1. En el paso 4 del cuaderno, reemplace con el nombre de dominio de Elasticsearch. Puede obtener el nombre de dominio ejecutando el siguiente comando:
awk -F '|' '$2 ~ /ElasticsearchDomainEndpoint/ {gsub(/^[ t]+|[ t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt

ejecutar el cuaderno

Ejecute cada celda del cuaderno para cargar datos en el dominio de Elasticsearch y léala nuevamente para verificar que la carga se haya realizado correctamente. Consulte las instrucciones detalladas en el cuaderno para obtener instrucciones específicas de ejecución.

Ingerir datos en OpenSearch Service mediante la conexión de AWS Glue OpenSearch Service

En esta sección, cargamos un índice de OpenSearch Service usando Spark y el Conexión del servicio OpenSearch de AWS Glue.

Crear el trabajo de AWS Glue

Complete los siguientes pasos para crear un trabajo ETL visual de AWS Glue:

  1. En la consola de AWS Glue, elija Empleos de ETL en el panel de navegación.
  2. bajo Crear trabajo, escoger ETL visuales

Esto abrirá el editor visual del trabajo de AWS Glue.Imagen que muestra la página de la consola de AWS para AWS Glue para abrir Visual ETL

  1. Seleccione el signo más y debajo Fuentes, escoger Amazon S3.

Imagen que muestra la página de la consola de AWS para el editor visual de AWS Glue

  1. En el editor visual, elija la opción Fuente de datos: depósito S3 nodo.
  2. En Los Propiedades de la fuente de datos: S3 Panel, configure la fuente de datos de la siguiente manera:
    • Para Tipo de fuente S3, seleccione Ubicación S3.
    • Para URL de S3, escoger Examinar S3y elija el green_tripdata_2022-12.parquet archivo del depósito S3 designado.
    • Para Formato de datos, escoger parquet.
  1. Elegir Inferir esquema para permitir que AWS Glue detecte el esquema de los datos.

Esto configurará su fuente de datos desde el depósito S3 especificado.

Imagen que muestra la página de la consola de AWS para el editor visual de AWS Glue

  1. Elija el signo más nuevamente para agregar un nuevo nodo.
  2. Para Transforma, escoger Soltar campos para incluir este paso de transformación.

Esto le permitirá eliminar cualquier campo innecesario de su conjunto de datos antes de cargarlo en el Servicio OpenSearch.

Imagen que muestra la página de la consola de AWS para el editor visual de AWS Glue

  1. Elija el Soltar campos Transformar nodo, luego seleccionar los siguientes campos para eliminar del conjunto de datos:
    • payment_type
    • trip_type
    • congestion_surcharge

Esto eliminará estos campos de los datos antes de que se carguen en el servicio OpenSearch.

Imagen que muestra la página de la consola de AWS para el editor visual de AWS Glue

  1. Elija el signo más nuevamente para agregar un nuevo nodo.
  2. Para Orden de Targets o Metas, escoger Servicio Amazon OpenSearch.

Esto configurará el Servicio OpenSearch como el destino de los datos que se están procesando.

Imagen que muestra la página de la consola de AWS para el editor visual de AWS Glue

  1. Elija el Destino de los datos: servicio Amazon OpenSearch nodo y configúrelo de la siguiente manera:
    • Para Conexión al servicio Amazon OpenSearch, elige la conexión GlueOpenSearchServiceConnec-* desde el menú desplegable.
    • Para Home, introduzca green_taxi. green_taxi El índice se creó anteriormente en la sección “Ingerir datos en el servicio OpenSearch utilizando la biblioteca OpenSearch Spark”.

Esto configura el servicio OpenSearch para escribir los datos procesados ​​en el índice especificado.

Imagen que muestra la página de la consola de AWS para el editor visual de AWS Glue

  1. En la pestaña Detalles del trabajo Pestaña, actualice los detalles del trabajo de la siguiente manera:
    • Para Nombre, ingrese un nombre (por ejemplo, Spark-and-Glue-OpenSearch-Connection).
    • Para Descripción, ingrese una descripción opcional (por ejemplo, AWS Glue job using Glue OpenSearch Connection to load data into Amazon OpenSearch Service).
    • Para Rol de IAM, elige el rol que comienza con GlueOpenSearchStack-GlueRole-*.
    • Para el Versión con pegamento, escoger Glue 4.0 – Supports spark 3.3, Scala 2, Python 3
    • Deje el resto de los campos como predeterminados.
    • Elegir Guardar Para guardar los cambios.

Imagen que muestra la página de la consola de AWS para el editor visual de AWS Glue

  1. Para ejecutar el trabajo de AWS Glue Spark-and-Glue-OpenSearch-Connector, seleccione Ejecutar.

Esto iniciará la ejecución del trabajo.

Imagen que muestra la página de la consola de AWS para el editor visual de AWS Glue

  1. Elija el Ron pestaña y espere a que el trabajo de AWS Glue se complete correctamente.

Verá que el estado cambia a logrado cuando el trabajo esté completo.

Imagen que muestra la página de la consola de AWS para el estado de ejecución del trabajo de AWS Glue

Limpiar

Para limpiar sus recursos, complete los siguientes pasos:

  1. Elimine la pila de CloudFormation:
aws cloudformation delete-stack 
--stack-name GlueOpenSearchStack 
--region <AWS_REGION>

  1. Eliminar los trabajos de AWS Glue:
    • En la consola de AWS Glue, debajo de Empleos de ETL en el panel de navegación, elija ETL visuales.
    • Seleccione los trabajos que ha creado (Spark-and-Glue-OpenSearch-Connector, Spark-and-ElasticSearch-Code-Stepsy Spark-and-OpenSearch-Code-Steps) y en el Acciones menú, seleccione Borrar.

Conclusión

En esta publicación, exploramos varias formas de ingerir datos en OpenSearch Service usando Spark en AWS Glue. Demostramos el uso de tres bibliotecas clave: Conexión del servicio OpenSearch de AWS Glue, la Biblioteca Spark de OpenSearch, y el Biblioteca Hadoop de ElasticsearchLos métodos descritos en esta publicación pueden ayudarlo a optimizar la ingesta de datos en OpenSearch Service.

Si está interesado en aprender más y adquirir experiencia práctica, hemos creado un taller que lo guiará a través de todo el proceso en detalle. Puede explorar la configuración completa para ingerir datos en OpenSearch Service, manejar transmisiones por lotes y en tiempo real y crear paneles. Vea el taller Procesamiento y análisis de datos unificados en tiempo real mediante Amazon OpenSearch y Apache Spark para profundizar su comprensión y aplicar estas técnicas paso a paso.


Acerca de los autores

Ravikiran Rao es arquitecto de datos en Amazon Web Services y le apasiona resolver desafíos complejos relacionados con los datos para diversos clientes. Fuera del trabajo, es un entusiasta del teatro y un jugador de tenis amateur.

Vishwa Gupta es Arquitecto de datos sénior en la práctica de análisis de servicios profesionales de AWS. Ayuda a los clientes a implementar grandes soluciones de análisis y datos. Fuera del trabajo, disfruta pasar tiempo con la familia, viajar y probar comida nueva.

Suvojit Dasgupta es arquitecto de datos principal en Amazon Web Services. Dirige un equipo de ingenieros expertos en el diseño y la creación de soluciones de datos escalables para clientes de AWS. Se especializa en el desarrollo e implementación de arquitecturas de datos innovadoras para abordar desafíos empresariales complejos.

Artículos relacionados

punto_img

Artículos Recientes

punto_img