Spark Elasticsearch
O que é o Spark Elasticsearch?
O Spark Elasticsearch é um banco de dados distribuído NoSQL que armazena, recupera e gerencia dados semiestruturados e orientados a documentos. É um mecanismo de pesquisa RESTful de código aberto GitHub, desenvolvido sobre o Apache Lucene e lançado sob os termos da Licença Apache.
O Elasticsearch é baseado em Java e, portanto, está disponível para muitas plataformas que podem pesquisar e indexar arquivos de documentos em formatos diversos. Os dados armazenados no Elasticsearch estão na forma de documentos JSON sem esquema, semelhantes aos bancos de dados NoSQL.
História e introdução ao Elasticsearch
O Elasticsearch, aspecto integral de um conjunto maior de ferramentas de código aberto conhecido como Elastic Stack, é um mecanismo popular de busca de texto completo, originalmente projetado e desenvolvido por engenheiros da equipe do Google Brain. É amplamente utilizado em vários aplicativos comerciais, como Reddit, YouTube e eBay. Para muitas empresas, a pesquisa baseada em texto se tornou um componente essencial de seus processos de negócios. Dessa forma, o Elasticsearch é semelhante a outros mecanismos de busca.
Uma diferença fundamental entre o Elasticsearch e outros mecanismos de busca é que o Elasticsearch pode armazenar e gerenciar dados distribuídos. Em outras palavras, ele foi projetado para lidar com dados de tamanho constantemente variável. Isso fornece a capacidade para queries muito complexas, qualquer que seja o tamanho do conjunto de dados. No entanto, o impacto potencial de fazer com que um único servidor de banco de dados manipule dados de vários usuários pode aumentar significativamente.
Quem usa o Elasticsearch?
Milhares de grandes empresas usam o Elasticsearch para seus dados online e offline, incluindo gigantes da tecnologia como Google, Oracle, Microsoft e muitas outras empresas conhecidas.
Mas você não precisa ser um gigante da tecnologia para querer uma maneira fácil de indexar dados estruturados. Você só precisa saber que ele existe e entender como funciona.
Afinal, para que serve exatamente o Elasticsearch?
O Elasticsearch pode servir a uma ampla variedade de casos de uso. Por exemplo:
- Registros e análise de logs: o ecossistema de software e plataformas complementares de código aberto construído em torno do Elasticsearch o tornou uma das soluções de log mais fáceis de implementar e escalar.
- Extração e combinação de dados públicos: o Elasticsearch é flexível o suficiente para lidar com várias fontes diferentes de dados e manter tudo gerenciável e pesquisável.
- Pesquisa de texto completo: o ElasticSearch é orientado a documentos. Ele armazena e indexa documentos. A indexação cria ou atualiza documentos. Ao final da indexação, você pode pesquisar, classificar e filtrar documentos completos — não linhas de dados em formato de colunas.
- Dados e métricas de eventos: o Elasticsearch também é conhecido por trabalhar muito bem em dados de séries temporais, como métricas e eventos de aplicativos. Não importa a tecnologia que você usa, o Elasticsearch provavelmente tem os componentes necessários para capturar facilmente dados para aplicativos comuns e, no caso raro de isso não acontecer, adicionar essa capacidade é bastante fácil.
Arquitetura Elasticsearch: componentes principais
Para entender como o Spark Elasticsearch funciona, quando usá-lo e quando não usá-lo, primeiro, é preciso entender a infraestrutura por trás da arquitetura do Elasticsearch. Esses componentes principais incluem tudo, do cluster do Elasticsearch, portas 9200 e 9300 e fragmentos do Elasticsearch até réplicas, analisadores e documentos do Elasticsearch.
Cluster do Elasticsearch
O cluster do Elasticsearch é um grupo de nós de computação interconectados, e todos armazenam diferentes partes dos dados do cluster. Como usuário, você pode ajustar o número de nós para os quais cada cluster é designado para ser executado alterando o arquivo "elasticsearch.yml" encontrado na pasta de configurações. Embora seja possível executar quantos clusters você quiser, a maioria dos usuários geralmente usa apenas um nó para alcançar os resultados desejados.
Nó do Elasticsearch
O nó dó Elasticsearch é um recurso de computação especificamente ajustado para pesquisar, indexar e dimensionar o banco de dados. Por ser um banco de dados distribuído, o Elasticsearch usa uma única fonte da verdade, que é o nó de dados do Elasticsearch que mantém todos os seus dados. Cada nó em um cluster usa um nome diferente. Normalmente, os nós do Elasticsearch têm cerca de 10 a 50 milhões de documentos em cada índice.
Portas 9200 e 9300
Há dois tipos de portas disponíveis no fragmento do Elasticsearch. A primeira das duas portas de fragmento está sempre aberta, e a segunda porta de fragmento é aberta somente quando um índice do Elasticsearch é criado e um cluster é inicializado. 9200 é a porta default a ser usada para o fragmento primário, e 9300 é a porta default a ser usada para sua réplica.
Fragmentos do Elasticsearch
Os fragmentos do Elasticsearch são simplesmente uma coleção de índices Kibana dentro de um índice. Existem dois tipos de índice nos índices do Elasticsearch: documentos do Elasticsearch (doc) e índices do Elasticsearch. Os documentos estão vinculados a identificadores, e os índices, a um nome exclusivo.
Réplicas do Elasticsearch
Réplica é uma cópia de um fragmento com todas as alterações refletidas na réplica secundária, mas que permanece transparente para o cliente. A réplica primária é atualizada automaticamente quando novos dados são adicionados ou quando excluídos, atualizados ou modificados.
Analisadores do Elasticsearch
Um analisador faz parte de um cluster do Elasticsearch que obtém dados do banco de dados e executa análises com ele. Isso possibilita filtrar e classificar os dados que foram retornados ao usuário.
Documento do Elasticsearch
Os documentos do Elasticsearch são o principal tipo de índice no Elasticsearch. Cada documento é criado como uma ID no conjunto de dados e tem uma única coluna por tipo de documento. Um exemplo simples de ID de documento para o Elasticsearch é {doc id}. Em geral, cada documento em um cluster do Elasticsearch tem um ID de fragmento, nome e uma matriz de índices, e cada campo tem seu próprio identificador que se aplica aos fragmentos.
Como funciona o Elasticsearch?
Em resumo, o Elasticsearch funciona obtendo dados e publicando-os em todos os nós do cluster e, em seguida, aumentando e diminuindo os dados com base na quantidade atual de dados armazenados. O Elasticsearch se beneficia da capacidade de armazenar todos os seus dados em um único banco de dados, com um contêiner de índice elástico.
Como o Elasticsearch é um mecanismo de busca RESTful orientado a documentos, ele tem uma variedade de ferramentas úteis e pode trabalhar com conjuntos de dados grandes e intimidadores. Além disso, esse software pode ser usado como uma ferramenta complementar, juntamente com outra. Por exemplo, Elasticsearch + Spark.
Exemplo de query do Elasticsearch
Digamos que você queira pesquisar a palavra "Telecommunications". A seguinte sintaxe de busca simples fará o seguinte:
$"Telecommunications"
Como o Elasticsearch funciona a partir de documentos, você não pode simplesmente pesquisar em uma lista de documentos. Você precisa consultar um "tipo de documento". Para garantir que apenas os documentos que atendam aos critérios de pesquisa sejam recuperados, usaremos a sintaxe "type:Telecommunications".
Para fazer essa query, passamos o número de ID do documento como um parâmetro de query:
$"type:telecommunications"
Para testar ainda mais, você também pode criar um documento de exemplo simples executando o seguinte:
create index:type:telecommunications create partition:type:telecommunications --data-urlencode /tasks --data-urlencode tasks/
Que tipo de banco de dados o Elasticsearch utiliza?
Ao combinar a compilação de indexação Lucene com um modelo robusto de banco de dados de distribuição, a ferramenta Elasticsearch é capaz de fragmentar conjuntos de dados em pequenos componentes conhecidos como fragmentos e distribuí-los em vários nós.
Mas onde o Elasticsearch armazena os dados?
Os dados armazenados no Elasticsearch estão em formato JSON ou CSV. Cada índice tem seu próprio modelo para documentos armazenados no índice. O índice é totalmente replicado usando um barramento de mensagem para se comunicar com a replicação secundária. Os arquivos de log são gravados como índices do Elasticsearch.
Esses documentos são armazenados como uma matriz de pares de valores-chave em uma estrutura de dados conhecida como "conjunto memcached". Conjunto memcached é uma estrutura de dados leve, com pouca memória e escalável que tem a capacidade de armazenar e processar dados com um grande volume de memória.
O armazenamento do Elasticsearch é otimizado para operações de ingestão, indexação e pesquisa com arquivos gravados no disco em intervalos regulares. Na verdade, a única maneira de alterar o tamanho do índice é excluir o último documento inserido e substituí-lo por um novo. Essa tarefa é chamada de "migração de dados" e se refere a um novo documento que está sendo criado a partir do novo índice, atualizado e, depois, reinserido.
O que é agregação do Elasticsearch?
A agregação do Elasticsearch, ou a alocação do mesmo cluster a vários endpoints, é um recurso poderoso que permite usar o mesmo cluster do Elasticsearch para obter dados e funcionalidades adicionais sem afetar o desempenho do cluster de produção.
Ao agregar clusters, cada nó recebe um de três tipos diferentes de carga de trabalho. Os tipos de carga de trabalho são:
- Não relacional
- Processamento de transações online (OLTP)
- Processamento analítico online (OLAP)
Não relacional
Todas as solicitações de rede geradas pelo Elasticsearch são geradas por queries que estão sendo executadas no cluster do Elasticsearch.
Quando um nó do Elasticsearch está ocioso, é responsabilidade do sistema operacional executar queries em um thread em segundo plano e relatar continuamente os resultados. Quando um nó do Elasticsearch estiver em uso, ele participará de um mecanismo de failover (no caso de falha de um nó) ou (no caso de sobrecarga do nó) passará as solicitações de query para vários outros nós, aguardando até que um dos outros nós esteja livre.
Embora o tráfego de rede gerado pelo Elasticsearch seja mais comumente a query de dados relacionados, há muitas outras situações que também podem tirar proveito do Elasticsearch.
OLTP
Todas as solicitações de rede geradas pelo Elasticsearch ainda são geradas por queries que estão sendo executadas no cluster do Elasticsearch.
Embora possa ser um cluster completo do Elasticsearch para um sistema grande (e certamente um bom começo), há momentos em que é desejável combinar o Elasticsearch com uma fonte de dados relacional. Nesses casos, o Elasticsearch será executado em relação a uma fonte de dados relacional secundária para processamento e apenas manterá o controle de algumas das queries que ele executou. Nesse cenário, cada nó é atribuído apenas a uma origem secundária, e o outro permanece ocioso.
OLAP
Uma distinção fundamental entre a agregação do Elasticsearch e a agregação regular é que, enquanto outras agregações podem usar o mesmo cluster do Elasticsearch para vários fins, a agregação do Elasticsearch usa uma fonte de dados secundária para armazenar e processar os dados agregados. Isso permite que a agregação do Elasticsearch armazene mais dados sem criar queries adicionais em um conjunto de dados primário, como conjuntos de dados SQL ou NoSQL.
Como instalar e usar o Elasticsearch
A instalação é bastante simples. Também é possível usar repositórios padrão para Elasticsearch e definir um ambiente padrão para ele.
O Elasticsearch usa um arquivo de configuração chamado Kibana.yml como base para sua configuração. Você pode modificar o arquivo para atender às suas necessidades. Você também pode usar qualquer um dos provedores de plugin do Elasticsearch mais populares, como InfluxDB, Logstash etc.
Etapas para instalar o Elasticsearch:
- Instale a versão Elasticsearch Development, bem como o servidor e as dependências
- Instale a extensão BOSH para Java. A extensão BOSH ajuda a escrever modelos HTML para o Elasticsearch para tornar os dados mais acessíveis e legíveis para humanos, bem como ferramentas de manipulação de dados. A extensão BOSH exige um tempo de execução Java. Você pode usar repositórios padrão para Java em seu sistema operacional para instalá-lo.
- Inicie o Elasticsearch
- Instale o plugin Java para BOSH
- É isso. O Elasticsearch está funcionando em sua máquina e agora você tem acesso a todos os dados de uma maneira fácil de ler.
Visualização de dados do Elasticsearch
O Elasticsearch permite pesquisar e filtrar todos os tipos de dados por meio de uma API simples. A API é RESTful, portanto, os usuários não só podem usá-la para análise de dados, como também podem usá-la em produção para aplicativos baseados na web. Atualmente, o Elasticsearch inclui pesquisa facetada, uma funcionalidade que permite calcular agregações dos dados. Veja alguns dos recursos mais relevantes:
- Fornece uma solução de pesquisa escalonável.
- Realiza buscas quase em tempo real.
- Oferece suporte para multilocação.
- Simplifica os processos de backup e garante a integridade dos dados.
- É possível recuperar um índice em caso de falha do servidor.
- Usa Javascript Object Notation (JSON), bem como interfaces de programas de aplicação (APIs) Java.
- Indexa automaticamente documentos JSON.
- A indexação usa identificadores exclusivos de nível de tipo.
- Cada índice pode ter suas próprias configurações.
- As buscas podem ser feitas com strings de query baseadas em Lucene.
Por que usar o Elasticsearch em vez de SQL?
O serviço Elasticsearch é, de longe, a tecnologia de pesquisa mais amplamente adotada, poderosa e útil porque, no que diz respeito ao processamento de grandes quantidades de dados de forma rápida e eficiente, é significativamente melhor do que a maioria de suas contrapartes SQL.
O Elasticsearch foi criado especificamente para buscas corporativas, fornecendo recursos poderosos e ferramentas fáceis de usar para empresas que dependem da análise de dados. Isso oferece uma forma mais prática e flexível de armazenar, pesquisar e analisar batches de dados de uma forma menos intensiva em recursos.
Como verificar a versão do Elasticsearch
Há duas maneiras rápidas de verificar a versão do Elasticsearch que você está executando. A primeira é iniciar e fazer login no console do ElasticSearch e conferir a versão do software. A segunda é verificar a documentação oficial do Elasticsearch.
As três principais alternativas ao Elasticsearch no mercado
Ao considerar qual software usar, há três principais alternativas do Elasticsearch a serem levadas em conta antes de tomar uma decisão:
AWS
A Amazon Web Services (AWS) tornou-se a principal plataforma de computação para startups, pesquisas de ponta e para as maiores empresas que buscam aprimorar sua infraestrutura de computação. Com tecnologia que permite aos clientes usar e construir seus próprios servidores virtuais, juntamente com o mais amplo conjunto de serviços de computação em nuvem do setor, a AWS alimenta as chamadas "guerras de nuvem" entre o Azure da Microsoft e o GCP do Google.
Solr
O Apache Solr é um daemon de mecanismo de análise de busca de código aberto (Licenciado BSD) escrito em Java e é um dos mecanismos de busca de código aberto mais populares. Na verdade, o Solr potencializa a funcionalidade de busca de muitos dos maiores sites de comércio eletrônico e plataformas de redes sociais do mundo, incluindo Twitter, Yahoo, Amazon, eBay e eBay Enterprise.
O Solr usa uma arquitetura distribuída para fornecer pesquisa rápida e apresenta uma API de armazenamento unificada exclusiva que permite ao mecanismo de busca se integrar perfeitamente a praticamente qualquer mecanismo de armazenamento usado pela empresa.
ArangoDB
O ArangoDB é um banco de dados distribuído orientado a documentos NoSQL e tornou-se uma escolha popular devido ao seu poderoso processamento analítico de dados e facilidade de uso. É uma linguagem semelhante à SQL que opera no armazenamento de valores-chave do ArangoDB, permitindo que os usuários criem tabelas, junções e queries da mesma maneira que faria em bancos de dados relacionais.
O ArangoDB faz um bom trabalho para manter todo o seu código atualizado, e as páginas de suporte são bem projetadas. À medida que o projeto amadurece e mais pessoas contribuem, você pode esperar que essas páginas permaneçam atualizadas e fáceis de navegar. Sem mencionar que é compatível com todas as principais linguagens de programação, como Python e Javascript.
As três melhores ferramentas de Elasticsearch
Para aproveitar ao máximo seus dados, recomendamos usar o Elasticsearch em conjunto com outras ferramentas e software, principalmente Hevo Data, Logstash e Apache Nifi.
Hevo Data
O Hevo Data Elasticsearch é um mecanismo de busca distribuído gratuito e de código aberto projetado para ingerir dados do Elasticsearch, analisá-los em queries e executá-los como logs de eventos nos nós do cluster. O software permite executar queries de análise em tempo real em dados em tempo real, bem como backups desses dados.
Logstash
Simplificando, o Logstash é uma ferramenta do Elasticsearch que permite definir regras que ajudam a gerenciar dados recebidos assim que são extraídos pelo Elasticsearch. Ao obter os dados e processá-los instantaneamente, o Logstash fornece ferramentas analíticas e de visualização perfeitas para aproveitar ao máximo seus dados.
Apache NiFi
O Apache NiFi é um conjunto de bibliotecas que permite "links profundos" entre várias fontes de dados, incluindo, mas não limitado a APIs populares de código aberto, como a API de localização principal do Facebook, APIs REST do Twitter e até mesmo a API In-App do Yelp. Com o Apache NiFi, os usuários podem vincular suas próprias APIs e disponibilizar todas as informações de um conjunto de dados para vários outros softwares.
O Elasticsearch é ideal para você?
Com tudo o que você sabe agora sobre o Elasticsearch, de seus recursos até sua infraestrutura e arquitetura, tudo o que resta é decidir se ele é a ferramenta ideal para sua empresa.