Ir al contenido principal

Spark Elasticsearch

Prueba Databricks gratis

¿Qué es Spark Elasticsearch?

Spark Elasticsearch es una base de datos NoSQL distribuida que almacena, recupera y gestiona datos orientados a documentos y semiestructurados. Es un motor de búsqueda RESTful de código abierto de GitHub construido sobre Apache Lucene y lanzado bajo los términos de la Licencia Apache.

Elasticsearch está basado en Java, por lo que está disponible para muchas plataformas que pueden buscar e indexar archivos de documentos en varios formatos. Los datos almacenados en Elasticsearch se encuentran en forma de documentos JSON sin esquema, similar a las bases de datos NoSQL.

 

La historia e introducción a Elasticsearch

Elasticsearch es un aspecto integral de un conjunto más amplio de herramientas de código abierto conocido como Elastic Stack. Es un motor de búsqueda popular de texto completo, diseñado y desarrollado originalmente por ingenieros del equipo Google Brain. Se usa ampliamente en diversas aplicaciones comerciales, desde Reddit, YouTube y eBay. Para muchas empresas, la búsqueda basada en texto se ha convertido en un componente esencial de sus procesos comerciales. De esta manera, Elasticsearch es similar a otros motores de búsqueda.

Una diferencia clave entre Elasticsearch y otros motores de búsqueda es que Elasticsearch puede almacenar y gestionar datos distribuidos. En otras palabras, está diseñado para tratar con datos que tienen un tamaño que varía constantemente. Esto proporciona la capacidad para consultas más complejas, sin importar cuán grande sea el conjunto de datos. Sin embargo, el impacto potencial de hacer que un solo servidor de base de datos maneje datos de varios usuarios puede aumentar significativamente.

¿Quién usa Elasticsearch?

Miles de empresas líderes utilizan Elasticsearch para sus datos tanto en línea como fuera de línea, como los gigantes tecnológicos de Google, Oracle, Microsoft y muchas otras marcas reconocidas.

Pero no es necesario ser un gigante tecnológico para desear una forma sencilla de indexar datos estructurados. Solo necesitas saber que existe y entender cómo funciona.

Pero, ¿para qué se utiliza exactamente Elasticsearch?

Elasticsearch puede servir a una amplia gama de casos de uso, como:

  • Registro y análisis de registros:  el ecosistema de software y plataformas de código abierto complementarios desarrollado en torno a Elasticsearch lo ha convertido en una de las soluciones de registro más fáciles de implementar y escalar.
  • Raspado y combinación de datos públicos: Elasticsearch es lo suficientemente flexible como para aceptar varias fuentes de datos diferentes y mantenerlas gestionables y con capacidad de búsqueda.
  • Búsqueda de texto completo: Elasticsearch está orientado a documentos. Almacena e indexa documentos. La indexación crea o actualiza documentos. Una vez finalizada la indexación, puede buscar, ordenar y filtrar documentos completos, y no filas de datos en columnas.
  • Datos y métricas de eventos: Elasticsearch también es conocido por funcionar muy bien con datos de series temporales, como métricas y eventos de aplicaciones. Independientemente de la tecnología que esté utilizando, Elasticsearch probablemente tenga los componentes necesarios para obtener datos para aplicaciones comunes con facilidad. En el raro caso de que no los tenga, agregar esa capacidad es bastante fácil.

Arquitectura de Elasticsearch: componentes clave

Para entender cómo funciona Spark Elasticsearch, cuándo usarlo y cuándo no, primero debes comprender la infraestructura detrás de la arquitectura de Elasticsearch. Estos componentes clave incluyen todo, desde el clúster de Elasticsearch, los puertos 9200 y 9300, y los fragmentos de Elasticsearch hasta las réplicas, los analizadores y los documentos de Elasticsearch.

Clúster de Elasticsearch

Un clúster de Elasticsearch es un grupo de nodos informáticos interconectados, los cuales almacenan diferentes datos del clúster. Como usuario, puede ajustar el número de nodos asignados a cada clúster para ejecutar al modificar el archivo "elasticsearch.yml" que se encuentra en la carpeta de configuraciones. Si bien es posible ejecutar tantos clústeres como desee, la mayoría de los usuarios suelen encontrar que un nodo es todo lo que se necesita para lograr los resultados deseados.

Nodo de Elasticsearch

Un nodo de Elasticsearch es un recurso informático que se ajusta específicamente para la búsqueda, indexación y escalado de la base de datos. Dado que Elasticsearch es una base de datos distribuida, utiliza una única fuente de verdad, que es el nodo de datos de Elasticsearch que contiene todos tus datos. Cada nodo en un clúster utiliza un nombre diferente. Por lo general, los nodos de Elasticsearch tienen entre 10 y 50 millones de documentos en cada índice.

Puertos 9200 y 9300

Existen dos tipos de puertos disponibles en el fragmento (shard) de Elasticsearch. El primero de los dos puertos de partición siempre está abierto, y el segundo puerto de partición solo se abre cuando se crea un índice de Elasticsearch y se inicializa un clúster. 9200 es el puerto predeterminado que se va a utilizar para la partición principal, y 9300 es el puerto predeterminado que se utiliza para su réplica.

Fragmentos de Elasticsearch

Los fragmentos de Elasticsearch son simplemente una colección de índices de Kibana dentro de un índice. Hay dos tipos de índice en Elasticsearch: los documentos de Elasticsearch (doc) y los índices de Elasticsearch. Los documentos se enlazan con identificadores y los índices con un nombre único.

Réplicas de Elasticsearch

Una réplica es una copia de un fragmento con todos los cambios reflejados en la réplica secundaria, pero que permanece transparente para el cliente. La réplica principal se actualiza automáticamente cuando se agregan nuevos datos o cuando se eliminan, actualizan o modifican.

Analizadores de elasticsearch

Un analizador es parte de un clúster de Elasticsearch que extrae datos de la base de datos y realiza análisis con esta. Esto permite filtrar y ordenar los datos que se entregaron al usuario.

Documento de Elasticsearch

Los documentos de Elasticsearch son el tipo de índice principal en Elasticsearch. Cada documento se crea como un ID en el conjunto de datos y tiene una sola columna por tipo de documento. Un ejemplo simple de un ID de documento para Elasticsearch es {doc id}. En general, cada documento en un clúster de Elasticsearch tiene un ID de fragmento, un nombre y una matriz de índices con todos los campos y sus propios identificadores de fragmentos.

¿Cómo funciona Elasticsearch?

En resumen, Elasticsearch funciona tomando datos y publicándolos en cada nodo del clúster, y luego escalando los datos según la cantidad actual de datos almacenados. Elasticsearch se beneficia de poder almacenar todos tus datos en una base de datos con un contenedor de índice elástico.

Debido a que Elasticsearch es un motor de búsqueda RESTful orientado a documentos, cuenta con una variedad de herramientas útiles y puede trabajar con conjuntos de datos grandes e intimidantes. Además, este software se puede utilizar como una herramienta complementaria de otra. Por ejemplo, Elasticsearch + Spark.

Un ejemplo de consulta de Elasticsearch

Supongamos que quieres buscar la palabra "telecomunicaciones". La siguiente sintaxis de búsqueda simple hará el truco:

$"telecomunicaciones"

Dado que Elasticsearch funciona a partir de documentos, no puedes simplemente buscar en una lista de documentos. Necesitas consultar un "tipo de documento". Usaremos la frase "type:telecomunicaciones" para asegurarnos de que solo obtendremos los documentos que cumplan con los criterios de búsqueda.

Para realizar esta consulta, pasamos el número de ID del documento como parámetro de consulta:

$"tipo:telecomunicaciones"

Para probar esto más a fondo, también puedes crear un documento de ejemplo simple al ejecutar lo siguiente:

crear índice:tipo:telecomunicaciones crear partición:tipo:telecomunicaciones --data-urlencode /tareas --datos-tareas urlencode/

¿Qué tipo de base de datos utiliza Elasticsearch?

Al combinar la compilación de indexación de Lucene con un modelo de base de datos de distribución robusto, la herramienta Elasticsearch puede fragmentar conjuntos de datos en pequeños componentes, conocidos como fragmentos, y distribuirlos en varios nodos.

Pero, ¿dónde almacena Elasticsearch los datos?

Los datos almacenados en Elasticsearch se encuentran en formato JSON o CSV. Cada índice tiene su propia plantilla para los documentos almacenados en el índice. El índice se replica completamente al usar un bus de mensajes para comunicarse con la replicación secundaria. Los archivos de registro se escriben como índices de Elasticsearch.

Estos documentos se almacenan como una matriz de pares clave y valor en una estructura de datos conocida como "memcached set". Un conjunto memcached set es una estructura de datos escalable, ligera y de baja memoria que tiene la capacidad de retener y procesar datos con un gran volumen de memoria.

El almacenamiento de Elasticsearch está optimizado para operaciones de ingesta, indexación y búsqueda, con archivos que se escriben en el disco en intervalos regulares. De hecho, la única forma de cambiar el tamaño del índice es al eliminar el último documento insertado y reemplazarlo por uno nuevo. Esta tarea se denomina "migración de datos (data migration)" y se refiere a un nuevo documento que se crea a partir del nuevo índice, que se actualiza y luego se vuelve a insertar.

¿Qué es la agregación en Elasticsearch?

La suma de Elasticsearch, o la asignación del mismo clúster a varios puntos finales, es una característica poderosa que te permite usar el mismo clúster de Elasticsearch para datos y funcionalidades adicionales sin afectar el rendimiento de tu clúster de producción.

Al agregar clústeres, a cada nodo se le asigna uno de tres tipos diferentes de cargas de trabajo. Los tipos de cargas de trabajo son:

  1. No relacional
  2. Procesamiento de transacciones en línea (OLTP)
  3. Procesamiento analítico en línea (OLAP)

No relacional

Todas las solicitudes de red generadas por Elasticsearch son generadas por consultas que se ejecutan en el clúster de Elasticsearch.

Cuando un nodo de Elasticsearch está inactivo, es responsabilidad del sistema operativo ejecutar consultas en un hilo en segundo plano e informar continuamente sobre los resultados. Cuando se utiliza un nodo de Elasticsearch, este participará en un mecanismo de failover (en caso de que haya un error o sobrecarga del nodo) y pasará las solicitudes de consulta a varios otros nodos, y espera hasta que uno de los otros nodos esté libre.

Si bien el tráfico de red generado por Elasticsearch suele consultar datos relacionados, existen muchas otras situaciones que también pueden sacar provecho de Elasticsearch.

OLTP

Todas las solicitudes de red generadas por Elasticsearch se siguen generando a través de consultas que se ejecutan en el clúster de Elasticsearch.

Si bien esto puede ser un clúster de Elasticsearch completo para un sistema grande (y ciertamente, un buen comienzo), hay ocasiones en las que es conveniente combinar Elasticsearch con una fuente de datos relacional. En esos casos, Elasticsearch se ejecutará contra una fuente de datos relacional secundaria para el procesamiento y solo llevará un registro de algunas de las consultas que ha ejecutado. En este escenario, a cada nodo se le asigna solo una fuente secundaria, mientras que el otro permanece inactivo.

Procesamiento analítico en línea (OLAP)

Una distinción clave entre la agregación de Elasticsearch y la agregación regular es que, mientras que otras agregaciones pueden usar el mismo clúster de Elasticsearch para múltiples propósitos, la agregación de Elasticsearch utiliza una fuente de datos secundaria para almacenar y procesar los datos agregados. Esto permite que la agregación de Elasticsearch almacene más datos sin crear consultas adicionales en un conjunto de datos primario, como conjuntos de datos SQL o NoSQL.

Cómo instalar Elasticsearch y usarlo

La instalación es bastante sencilla. Es posible usar repositorios predeterminados y también establecer un entorno predeterminado para Elasticsearch.

Elasticsearch usa un archivo de configuración llamado Kibana.yml como base para su configuración. Puede modificar el archivo para adaptarlo a sus necesidades. También puedes usar cualquiera de los proveedores de plugins de Elasticsearch más populares, como InfluxDB, Logstash, etc.

Los pasos para instalar Elasticsearch:

  1. Instala la versión de desarrollo de Elasticsearch, así como el servidor e instala las dependencias.
  2. Instala la extensión BOSH para Java. La extensión BOSH te ayuda a escribir plantillas HTML para tu Elasticsearch, para que los datos sean más accesibles y legibles para los humanos, así como para herramientas de manipulación de datos. La extensión BOSH requiere un tiempo de ejecución de Java. Puedes usar repositorios predeterminados para Java en tu sistema operativo para instalarlo.
  3. Iniciar Elasticsearch
  4. Instalar el complemento de Java para BOSH
  5. Eso es todo. Elasticsearch está en funcionamiento en tu máquina y ahora tienes acceso a todos los datos de una manera fácil de leer.

Visualización de datos de Elasticsearch

Elasticsearch te permite buscar y filtrar todo tipo de datos a través de una API sencilla. La API es RESTful, por lo que los usuarios no solo pueden usarla para el análisis de datos, sino también en producción para las aplicaciones basadas en la web. En la actualidad, Elasticsearch incluye la búsqueda facetada, una funcionalidad que te permite calcular grupos de tus datos. Aquí están algunas de las características más relevantes:

  • Proporciona una solución de búsqueda escalable.
  • Realiza búsquedas casi en tiempo real.
  • Proporciona soporte para multi-tenencia.
  • Agiliza los procesos de copia de seguridad y garantiza la integridad de los datos.
  • Se puede recuperar un índice en caso de un fallo del servidor.
  • Usa la notación de objetos Javascript (JSON), así como las interfaces de programación de aplicaciones (API) Java.
  • Indexa automáticamente los documentos JSON.
  • La indexación emplea identificadores únicos de nivel de tipo.
  • Cada índice puede tener su propia configuración.
  • Las búsquedas se pueden realizar con cadenas de consulta basadas en Lucene.

¿Por qué conviene utilizar Elasticsearch en lugar de SQL?

El servicio de Elasticsearch es sin dudas la tecnología de búsqueda que más se elige por ser poderosa y útil, porque cuando se trata de procesar grandes cantidades de datos de manera rápida y eficiente, es notablemente mejor que la mayoría de sus contrapartes SQL.

Elasticsearch está diseñado específicamente para el uso de búsquedas empresariales, lo que aporta funciones poderosas y herramientas fáciles de usar para las empresas que dependen de los análisis de datos. De este modo, les ofrece a las empresas una forma más práctica y flexible de almacenar, buscar y analizar lotes de datos con un menor consumo de recursos.

Cómo verificar la versión de Elasticsearch

Hay dos formas rápidas de verificar la versión de Elasticsearch que estás ejecutando. La primera es iniciar sesión en la consola de ElasticSearch y consultar la versión del software. La segunda es consultar la documentación oficial de Elasticsearch.

Las tres mejores alternativas de Elasticsearch en el mercado

Al considerar qué software usar, hay tres principales alternativas a Elasticsearch que debes tener en cuenta antes de tomar una decisión:

AWS

Amazon Web Services (AWS) se ha convertido en la principal plataforma informática para startups, investigación de vanguardia y las empresas más grandes que buscan mejorar su infraestructura informática. Con tecnología que permite a los clientes usar y construir sus propios servidores virtuales, junto con el conjunto más amplio de servicios de computación en la nube de la industria, AWS impulsa las llamadas "guerras en la nube" entre Azure de Microsoft y GCP de Google.

Solr

Apache Solr es un daemon de motor de análisis de búsqueda de código abierto (con licencia BSD) escrito en Java y es uno de los motores de búsqueda de código abierto más populares. De hecho, Solr impulsa la funcionalidad de búsqueda de muchos de los sitios de comercio electrónico y plataformas de redes sociales más grandes del mundo, como Twitter, Yahoo, Amazon, eBay y eBay Enterprise.

Solr utiliza una arquitectura distribuida para proporcionar búsquedas rápidas y cuenta con una API de almacenamiento unificada única que permite al motor de búsqueda integrarse a la perfección con prácticamente cualquier mecanismo de almacenamiento que se utilice en la empresa.

ArangoDB

ArangoDB es una base de datos distribuida orientada a documentos NoSQL y se ha convertido en una opción popular debido a su potente procesamiento analítico de datos y facilidad de uso. Es un lenguaje similar a SQL que opera sobre el almacén de clave-valor de ArangoDB, lo que permite a los usuarios crear tablas, uniones y consultas de la misma manera que lo harían en bases de datos relacionales.

ArangoDB hace un buen trabajo al mantener todo su código actualizado y las páginas de soporte están bien diseñadas. A medida que el proyecto madura y más personas contribuyen, puedes esperar que estas páginas se mantengan actualizadas y sean fáciles de navegar. Y cabe mencionar que es compatible con todos los principales lenguajes de programación como Python y Javascript.

Las tres mejores herramientas de Elasticsearch

Para aprovechar al máximo tus datos, recomendamos usar Elasticsearch junto con otras herramientas y software, sobre todo Hevo Data, Logstash y Apache Nifi.

Hevo Data

Hevo Data Elasticsearch es un motor de búsqueda distribuido gratuito y de código abierto diseñado para ingerir datos de Elasticsearch, analizarlos en consultas y ejecutarlos como registros de eventos en los nodos del clúster. El software te permite ejecutar consultas analíticas en tiempo real sobre datos en tiempo real, así como sobre copias de seguridad de esos datos.

Logstash

En pocas palabras, Logstash es una herramienta de Elasticsearch que permite definir reglas para gestionar los datos entrantes en el momento en que son extraídos por Elasticsearch. Al tomar los datos y procesarlos instantáneamente, Logstash ofrece herramientas analíticas y de visualización perfectas para aprovechar al máximo tus datos.

Apache NiFi

Apache Nifi es un conjunto de bibliotecas que admite "enlaces profundos" entre varias fuentes de datos, incluidas, entre otras, las API de código abierto populares, como la API de ubicación principal de Facebook, las API REST de Twitter e incluso la API de funciones en la aplicación de Yelp. Con Apache NiFi, los usuarios pueden vincular sus propias API y poner toda la información de un conjunto de datos a disposición de varios otros programas.

¿Elasticsearch es adecuado para ti?

Con todo lo que sabes ahora sobre Elasticsearch, desde sus capacidades hasta su infraestructura y arquitectura, lo único que falta es que decidas si es una herramienta ideal para tu negocio.

Recursos adicionales

Volver al glosario