Com a ascensão de uma cultura Data Driven, as corporações e organizações tendem a cada vez mais armazenar e processar toneladas de dados. Esse comportamento pode produzir alguns desafios específicos, como por exemplo:
- A ingestão de novos dados é demorada, produzindo dificuldades na leitura dos dados já estabelecidos
- Apesar de usar servidores com grande capacidade computacional, é cada vez mais difícil e demorado processar os dados e obter insights
- As janelas de Backup são cada vez mais restritas e tendem a encavalar as cargas
- O processo de aquisição de um novo servidor mais poderoso e o processo de migração dos dados é altamente caro e muitas vezes inviável
Uma maneira de contornar estes problemas é a utilização de tecnologias para armazenamento e processamento de dados distribuído, o que foi resolvido com o advento do Apache Hadoop.
Apache Hadoop
O Hadoop é um sistema para armazenamento e processamento de grandes conjuntos de dados, e foi criado no ano de 2005 por Doug Cutting e Mike Cafarella. O nome e ícone do Hadoop são baseados no elefante de pelúcia do filho de Doug, na época com dois anos.
A grande vantagem do Hadoop é utilizar múltiplos servidores que trabalham em conjunto para armazenar e processar bases de dados em vez de um só como é comum nos bancos de dados tradicionais.
De uma maneira resumida um cluster de servidores Hadoop é composta de um servidor chamado NameNode e diversos servidores chamados DataNodes. Essas máquinas que compõem o cluster como DataNodes tem a característica de não necessariamente necessitarem de serem máquinas poderosas e com arquitetura específica de servidores como os quais estamos acostumados à encontrar, o que barateia em muito a composição do cluster Hadoop.
Graças à um componente chamado YARN, o Hadoop é preparado para comissionar facilmente e rapidamente novos DataNodes, o que garante escalabilidade ao cluster ao mesmo tempo que é altamente tolerante à falhas, monitorando continuamente o cluster e descomissionando DataNodes com falhas.
Quando um arquivo é salvo dentro de um cluster Hadoop, o NameNode que atua como um indexador de onde cada arquivo se encontra, armazena este novo arquivo por padrão em 3 DataNodes, o que também ajuda a compor o aspecto de alta tolerância a falhas e perca de dados. Este mecanismo de armazenamento do Hadoop é conhecido como Hadoop Distribucted File System ou HDFS.
No campo do processamento, o Hadoop MapReduce é um componente que permite processar dados utilizando de forma coordenada o armazenamento e processamento distribuído entre os diversos DataNodes do cluster. O MapReduce é capaz de processar petabytes de dados utilizando um paradigma de computação criado originalmente dentro do Google, e que é baseado em dois passos:
- Map: filtra e ordena os conjuntos de dados convertendo-os em conjuntos de chaves-valor
- Reduce: reduz as chaves-valor ao efetuar algum tipo agregação nos valores
É possível escrever programas MapReduce utilizando Java, Ruby, Python e C++. Observe abaixo um exemplo de como o mecanismo de MapReduce executa a contagem de palavras:
O mecanismo de MapReduce reinou absoluto durante anos no processamento de Big Data, até que em 2009 foi criado o Apache Spark, que acabou levando ao desuso do MapReduce.
Apache Spark
O Spark é um framework que pode ser executado junto ao Hadoop de modo à estender o modelo de processamento do MapReduce entregando uma performance até 100 vezes superior, ao mesmo tempo em que facilita bastante o trabalho de desenvolvimento de aplicações para processamento de alto volume de dados ao prover uma biblioteca mais completa e madura que o MapReduce, podendo ainda suportar programas escritos em Java, Scala, Python e R.
O Spark ainda é capaz de conectar em mais fontes de dados que o Hadoop HDFS, podendo realizar consultar e processamento de grandes conjuntos de dados em bancos de dados tradicionais como o SAP HANA, Oracle e PostgreSQL, e outros bancos de dados de armazenamento específico como o MongoDB e o ElasticSearch.
O Spark também oferece componentes para outras áreas além do processamento de alto volume de dados:
- Spark SQL: Permite utilizar SQL para processamento e consulta de conjuntos de dados no Spark
- Spark Streaming: Permite executar cargas de ingestão e processamento de dados de Streamings, permitindo execução de fluxos de Real-Time Big Data Analytics. Para mais informações sobre esse assunto, consulte o artigo prévio: Real-Time Big Data Analytics como uma vantagem competitiva de negócio
- Spark MLLib: Conjunto de bibliotecas para treino e execução de modelos de Machine Learning
- Spark GraphX: Permite o processamento de dados em grafos
Outras aplicações que trabalham junto ao Apache Hadoop
Uma série de outras aplicações e frameworks foram desenvolvidas para trabalharem junto ao Hadoop, além do Spark:
- Apache Hive: Permite executar um conjunto de arquivos do Hadoop HDFS como um banco SQL, permitindo as conhecidas funções de SELECT, INSERT, DELETE e UPDATE
- Apache Hbase: Parecido com o Hive, o Hbase permite execução de arquivos como um banco NoSQL.
- Apache Impala: Permite execução de consultas em dados no Hadoop HDFS e também no Hbase
- Apache Sqoop: Executa cargas de ingestão de dados entre sistemas de arquivos tradicionais ou bancos de dados relacionais e o Hadoop HDFS
- Apache Flume: É um sistema distribuído para coletar, agregar e ingerir grandes quantidades de dados de log. Possui uma arquitetura simples e flexível, baseada no fluxo de dados de streaming.