Passa al contenuto principale

Spark Elasticsearch

Prova Databricks gratis

Che cos'è Spark Elasticsearch?

Spark Elasticsearch è un database NoSQL distribuito che archivia, recupera e gestisce dati semi-strutturati e orientati ai documenti.È un motore di ricerca RESTful open source di GitHub basato su Apache Lucene e rilasciato secondo i termini della licenza Apache.

Basato su Java, Elasticsearch è disponibile per molte piattaforme con funzionalità di ricerca e indicizzazione di file di documenti in diversi formati. I dati sono archiviati in Elasticsearch sotto forma di documenti JSON senza schema, analogamente a quanto avviene nei database NoSQL.

Storia e introduzione a Elasticsearch

Parte integrante di un insieme più ampio di strumenti open source noti come Elastic Stack, Elasticsearch è un popolare motore di ricerca a tutto testo, originariamente progettato e sviluppato dagli ingegneri del Google Brain Team. È ampiamente utilizzato in numerose applicazioni commerciali, come Reddit, eBay e YouTube. Per molte imprese, la ricerca testuale è diventata una componente essenziale dei processi aziendali. Sotto questo punto di vista, Elasticsearch è simile ad altri motori di ricerca.

Una delle differenze principali è che Elasticsearch può archiviare e gestire dati distribuiti. In altre parole, è progettato per gestire dati le cui dimensioni variano costantemente. Ciò consente di eseguire query molto complesse, indipendentemente dalle dimensioni del set di dati. Affidare la gestione dei dati di più utenti a un singolo server di database può tuttavia avere un impatto significativamente maggiore.

Chi usa Elasticsearch?

Migliaia di aziende di alto livello utilizzano Elasticsearch per i loro dati online e offline, inclusi giganti della tecnologia come Google, Oracle, Microsoft e molti altri nomi noti.

Ma non devi un gigante della tecnologia per avere un modo semplice di indicizzare dati strutturati. Devi solo sapere che questa possibilità esiste e capire come funziona.

Ma a cosa serve esattamente Elasticsearch?

Elasticsearch copre un'ampia gamma di casi d'uso, come ad esempio:

  • Raccolta e analisi dei registri.  L'ecosistema di software e piattaforme open source complementari costruito attorno a Elasticsearch lo ha reso una delle soluzioni di logging più facili da implementare e scalare.
  • Estrazione e combinazione di dati pubblici. Elasticsearch è sufficientemente flessibile da poter utilizzare diverse fonti di dati mantenendole tutte gestibili e ricercabili.
  • Ricerca a tutto testo. Elasticsearch è orientato ai documenti. Archivia e indicizza documenti. L'indicizzazione crea o aggiorna documenti. Una volta terminata l'indicizzazione è possibile cercare, ordinare e filtrare documenti completi, e non semplicemente righe di dati colonnari.
  • Dati e metriche di eventi. Un'altra apprezzata caratteristica di Elasticsearch è la capacità di gestire efficacemente dati di serie temporali come metriche ed eventi applicativi. Indipendentemente dalla tecnologia che usi, Elasticsearch ha probabilmente i componenti necessari per consentirti di acquisire facilmente i dati per le applicazioni più comuni; e nel raro caso in cui non li abbia, tale funzionalità può essere aggiunta facilmente.

Architettura di Elasticsearch: componenti chiave

Per capire come funziona Spark Elasticsearch, quando usarlo e quando non usarlo, bisogna innanzitutto comprendere l'infrastruttura alla base dell'architettura Elasticsearch. Questi componenti chiave includono i cluster, le porte 9200 e 9300, le partizioni e le repliche, gli analizzatori e i documenti Elasticsearch.

Cluster Elasticsearch

Un cluster Elasticsearch è un gruppo di nodi di calcolo interconnessi che contengono parti diverse dei dati del cluster. L'utente ha la possibilità di regolare il numero di nodi eseguiti da ciascun cluster modificando il file "elasticsearch.yml" nella cartella delle configurazioni. Sebbene sia possibile eseguire il numero di cluster desiderato, un solo nodo è sufficiente a soddisfare le esigenze della maggior parte degli utenti.

Nodo Elasticsearch

Un nodo Elasticsearch è una risorsa di calcolo specificamente ottimizzata per la ricerca, l'indicizzazione e la scalabilità del database. Essendo un database distribuito, Elasticsearch utilizza un'unica fonte di verità, ovvero il nodo dati Elasticsearch che contiene tutti i dati. In un cluster, ciascun nodo utilizza un nome diverso. Ciascun indice dei nodi Elasticsearch contiene tipicamente da 10 a 50 milioni di documenti.

Porte 9200 e 9300

Sulla partizione Elasticsearch sono disponibili due tipi di porte. La prima delle due è sempre aperta, mentre la seconda viene aperta solo quando si crea un indice Elasticsearch e si inizializza un cluster. 9200 è la porta predefinita per la partizione primaria, mentre 9300 è la porta predefinita da usare per la sua replica.

Partizioni Elasticsearch

Le partizioni Elasticsearch sono semplicemente una raccolta di indici Kibana all'interno di un indice. In Elasticsearch esistono due tipi di indici: i documenti Elasticsearch (doc) e gli indici Elasticsearch. I documenti sono associati a identificatori e indici con un nome unico.

Repliche Elasticsearch

Una replica è una copia di una partizione; tutte le modifiche che vi vengono apportate si riflettono sulla replica secondaria, restando tuttavia trasparenti per il client. La replica primaria si aggiorna automaticamente quando vengono aggiunti nuovi dati o quando i dati vengono eliminati, aggiornati o modificati.

Analizzatori Elasticsearch

Un analizzatore è una parte di un cluster Elasticsearch che recupera i dati dal database e li utilizza per eseguire delle analisi. Ciò rende possibile filtrare e ordinare i dati da restituire all'utente.

Documento Elasticsearch

I documenti Elasticsearch sono il tipo di indice principale di Elasticsearch. Ogni documento viene creato come ID nel set di dati e ha una singola colonna per tipo di documento. Un semplice esempio di ID documento per Elasticsearch è {doc id}. In generale, ogni documento in un cluster Elasticsearch contiene l'ID della partizione, un nome e un array di indici in cui tutti i campi hanno i propri identificatori su quella partizione.

Come funziona Elasticsearch?

In breve, Elasticsearch prende i dati e li pubblica su ciascun nodo del cluster, scalandoli poi verso l'alto e verso il basso in base alla quantità di dati che vengono immagazzinati in quel momento. Elasticsearch offre la possibilità di archiviare tutti i dati in un unico database, con un contenitore di indici elastico.

Essendo un motore di ricerca RESTful orientato ai documenti, Elasticsearch dispone di un'ampia gamma di strumenti utili e può lavorare con set di dati di grandi dimensioni che sarebbero altrimenti molto difficili da gestire. Inoltre, può essere utilizzato per integrare le funzionalità di un altro strumento. Ad esempio, Elasticsearch + Spark.

Un esempio di query Elasticsearch

Supponiamo di voler cercare la parola "telecomunicazioni". Basterà usare questa semplice sintassi di ricerca:

$"telecomunicazioni"

Dato che Elasticsearch lavora a partire da documenti, non si può semplicemente eseguire la ricerca in un elenco di documenti. Sarà invece necessario interrogare un "tipo di documento". Utilizzeremo la frase "type:telecomunicazioni" per assicurarci di recuperare solo i documenti che soddisfano i criteri di ricerca.

Per effettuare questa query, usiamo il numero ID del documento come parametro della query:

$"type:telecomunicazioni"

Per effettuare un'ulteriore prova, puoi anche creare un semplice documento di esempio seguendo le seguenti istruzioni:

create index:type:telecomunicazioni create partition:type:telecomunicazioni --data-urlencode /tasks --data-urlencode tasks/

Che tipo di database utilizza Elasticsearch?

Combinando l'indicizzazione Lucene con un robusto modello di database di distribuzione, Elasticsearch può suddividere i set di dati in frammenti noti come "shard" (partizioni) e distribuirli su vari nodi.

Ma dove vengono archiviati i dati Elasticsearch?

I dati archiviati in Elasticsearch sono in formato JSON o CSV. Ogni indice ha un proprio modello per i documenti che vi sono archiviati. L'indice viene replicato completamente utilizzando un bus di messaggi per comunicare con la replica secondaria. I file di registro vengono scritti come indici Elasticsearch.

Questi documenti vengono archiviati come array di coppie chiave-valore in una struttura dati nota come "memcached set".Un memcached set è una struttura dati leggera e scalabile, a cui viene allocata memoria di basso livello, che può contenere ed elaborare dati con un grande volume di memoria.

L'archiviazione di Elasticsearch è ottimizzata per l'inserimento, l'indicizzazione e le operazioni di ricerca, e i file vengono scritti sul disco a intervalli regolari. Di fatto, l'unico modo per modificare le dimensioni dell'indice è cancellare l'ultimo documento inserito e sostituirlo con uno nuovo. Questa operazione è chiamata "migrazione dei dati" e si riferisce alla creazione, a partire dal nuovo indice, di un nuovo documento, che viene quindi aggiornato e successivamente reinserito.

Che cos'è l'aggregazione Elasticsearch?

L'aggregazione Elasticsearch, ovvero l'allocazione dello stesso cluster a più endpoint, è una potente funzionalità che consente di utilizzare lo stesso cluster Elasticsearch per dati e funzionalità aggiuntivi senza pregiudicare le prestazioni del cluster di produzione.

Quando si aggregano dei cluster, a ogni nodo viene assegnato uno tra tre diversi tipi di carico di lavoro. I tipi di carico di lavoro sono:

  1. Non relazionale
  2. Elaborazione delle transazioni online (OLTP)
  3. Elaborazione analitica online (OLAP)

Non relazionale

Tutte le richieste di rete di Elasticsearch sono generate dalle query eseguite sul cluster Elasticsearch.

Quando un nodo Elasticsearch è inattivo, è responsabilità del sistema operativo eseguire le query su un thread in background e riferire continuamente i risultati. Quando si utilizza un nodo Elasticsearch, questo partecipa a un meccanismo di failover (in caso di guasto di un nodo) o (in caso di sovraccarico del nodo) passa le richieste di query a un certo numero di altri nodi, in attesa che uno di essi si liberi.

Sebbene il traffico di rete generato da Elasticsearch consista soprattutto nell'interrogazione di dati correlati, esistono molte altre situazioni che possono trarre vantaggio dall'utilizzo di Elasticsearch.

OLTP

Anche in questo caso, tutte le richieste di rete di Elasticsearch sono generate da query eseguite sul cluster Elasticsearch.

Anche se un cluster Elasticsearch completo può essere sufficiente per un sistema di grandi dimensioni (o rappresentare comunque un buon punto di partenza), ci sono situazioni in cui è preferibile combinare Elasticsearch con una sorgente di dati relazionale. In questi casi, Elasticsearch utilizzerà una sorgente di dati relazionale secondaria per l'elaborazione, e terrà traccia solo di alcune delle query eseguite. In questo scenario, a ogni nodo viene assegnata una sola sorgente secondaria, mentre l'altra rimane inattiva.

OLAP

Una distinzione fondamentale tra l'aggregazione Elasticsearch e l'aggregazione normale è che, mentre altre aggregazioni possono utilizzare lo stesso cluster Elasticsearch per più scopi, l'aggregazione Elasticsearch utilizza una sorgente di dati secondaria per archiviare ed elaborare i dati aggregati. Ciò consente all'aggregazione Elasticsearch di memorizzare più dati senza creare query aggiuntive su un set di dati primario, come i set di dati SQL o NoSQL.

Come installare e utilizzare Elasticsearch

L'installazione è semplice e lineare. È possibile utilizzare repository predefiniti e anche impostare un ambiente predefinito per Elasticsearch.

Elasticsearch utilizza un file di configurazione chiamato Kibana.yml come base per la propria configurazione. Il file può essere modificato in base alle proprie esigenze. È anche possibile utilizzare uno dei più diffusi fornitori di plugin Elasticsearch, come InfluxDB, Logstash, ecc.

Passaggi per l'installazione di Elasticsearch:

  1. Installa la versione di sviluppo e il server Elasticsearch e le relative dipendenze.
  2. Installa l'estensione BOSH per Java. L'estensione BOSH aiuta a scrivere modelli HTML per Elasticsearch che rendono i dati più accessibili e leggibili sia per l'utente, sia per gli strumenti di manipolazione dei dati. L'estensione BOSH richiede un runtime Java. Per installarlo, puoi utilizzare i repository Java predefiniti sul proprio sistema operativo.
  3. Avvia Elasticsearch
  4. Installa il plugin Java per BOSH
  5. Fatto! Ora che Elasticsearch è attivo e funzionante sul tuo computer, potrai accedere a tutti i tuoi dati in un formato facile da leggere.

Visualizzazione dei dati Elasticsearch

Elasticsearch consente di cercare e filtrare ogni tipo di dati tramite una semplice API. Essendo RESTful, l'API in questione può essere utilizzata non solo per l'analisi dei dati, ma anche in fase di produzione per applicazioni basate sul web. La versione attuale di Elasticsearch include una funzionalità di ricerca sfaccettata che consente di elaborare aggregazioni di dati. Ecco alcune delle sue caratteristiche più rilevanti:

  • fornisce una soluzione di ricerca scalabile;
  • esegue ricerche quasi in tempo reale;
  • fornisce supporto per la multi-tenancy;
  • semplifica i processi di backup e garantisce l'integrità dei dati;
  • consente di recuperare un indice in caso di arresto anomalo del server;
  • utilizza la Javascript Object Notation (JSON) e le interfacce per applicazioni Java (API);
  • indicizza automaticamente i documenti JSON;
  • l'indicizzazione utilizza identificatori unici a livello di tipo;
  • ogni indice può avere le proprie impostazioni;
  • le ricerche possono essere effettuate con stringhe di query basate su Lucene.

Perché usare Elasticsearch invece di SQL?

Il servizio Elasticsearch è la tecnologia di ricerca di gran lunga più diffusa, potente e utile perché nettamente migliore della maggior parte delle sue controparti SQL nell'elaborare grandi quantità di dati in modo rapido ed efficiente.

Creato appositamente per la ricerca aziendale, Elasticsearch fornisce potenti funzionalità e strumenti di facile utilizzo alle aziende che si affidano all'analisi dei dati. Ad esse, Elasticsearch offre un modo più pratico e flessibile per archiviare, cercare e analizzare batch di dati con un minore dispendio di risorse.

Come verificare la versione di Elasticsearch

Ci sono due modi rapidi per verificare la versione di Elasticsearch in uso. La prima è avviare e accedere alla console Elasticsearch e visualizzare la versione del software. Il secondo è consultare la documentazione ufficiale fornita insieme a Elasticsearch.

Le tre migliori alternative a Elasticsearch sul mercato

Quando si valuta quale software utilizzare, ci sono tre alternative a Elasticsearch da prendere in considerazione prima di prendere una decisione:

aws

Amazon Web Services (AWS) è diventata la piattaforma informatica di punta per le startup, la ricerca d'avanguardia e le grandi aziende che vogliono potenziare la propria infrastruttura informatica. Con una tecnologia che consente ai clienti di utilizzare e costruire i propri server virtuali, insieme al set di servizi di cloud computing più ampio del settore, AWS alimenta la cosiddetta "guerra del cloud" tra Azure di Microsoft e GCP di Google.

Solr

Apache Solr è un demone di motore di ricerca analitico open source (con licenza BSD) scritto in Java ed è uno dei più popolari motori di ricerca open-source. Solr alimenta le funzionalità di ricerca di molti dei maggiori siti di e-commerce e piattaforme di social media, inclusi cui Twitter, Yahoo, Amazon, eBay ed eBay Enterprise.

Solr utilizza un'architettura distribuita per fornire una ricerca rapida e dispone di un'esclusiva API di archiviazione unificata che consente al motore di ricerca di integrarsi perfettamente con qualsiasi meccanismo di archiviazione utilizzato dall'azienda.

ArangoDB

ArangoDB è un database distribuito NoSQL orientato ai documenti ed è diventato una scelta popolare grazie alla potente elaborazione analitica dei dati e alla sua facilità d'uso. Si tratta di un linguaggio simile a SQL che opera sull'archivio di valori chiave ArangoDB, consentendo agli utenti di creare tabelle, giunzioni e query come in un database relazionale.

Il codice di ArangoDB viene aggiornato regolarmente e le pagine di supporto sono ben costruite. Man mano che il progetto matura e che un numero sempre maggiore di persone vi contribuisce, possiamo aspettarci che queste pagine restino sempre aggiornate e facili da navigare. Inoltre, è compatibile con tutti i principali linguaggi di programmazione, inclusi Python e Javascript.

I tre migliori strumenti Elasticsearch

Per sfruttare al meglio i tuoi dati, ti consigliamo di utilizzare Elasticsearch in tandem con altri strumenti e software, in particolare Hevo Data, Logstash e Apache Nifi.

Hevo Data

Hevo Data Elasticsearch è un motore di ricerca distribuito, gratuito e open source progettato per acquisire dati Elasticsearch, analizzarli in query ed eseguirli come registri di eventi sui nodi del cluster. Il software consente di eseguire query analitiche in tempo reale su dati in tempo reale e di fare backup di tali dati.

Logstash

In sintesi, Logstash è uno strumento Elasticsearch che consente di definire le regole che aiutano a gestire i dati in arrivo non appena questi vengono estratti da Elasticsearch. Prendendo i dati ed elaborandoli istantaneamente, Logstash fornisce strumenti analitici e di visualizzazione perfetti per sfruttare al meglio i dati.

Apache NiFi

Apache Nifi è un insieme di librerie che consente il "deep linking" tra più sorgenti di dati, incluse le più diffuse API open source come la Core Location API di Facebook, le REST API di Twitter e persino la In-App Feature API di Yelp. Con Apache NiFi, gli utenti possono collegare le proprie API e rendere disponibili tutte le informazioni di un set di dati ad altri software.

Elasticsearch fa al caso tuo?

Ora che conosci ogni aspetto di Elasticsearch, dalle funzionalità alla sua infrastruttura e architettura, sta a te decidere se è lo strumento ideale per la tua azienda.

Risorse aggiuntive

Torna al Glossario