Nos últimos anos, as tecnologias de Big Data e Data Science evoluíram muito. Em parte, esse desenvolvimento deve-se ao aparecimento/desenvolvimento de ambientes open-source que viabilizaram essas tecnologias como Python, Spark, Hadoop e R.

A Oracle, por exemplo,  adotou a linguagem R como padrão na realização de análises avançadas de dados e geração de gráficos sofisticados.

Nesta série de posts, focarei no Hadoop e algumas das principais ferramentas utilizadas na prática no estilo hands-on, intercalando com conceitos para contextualizar o uso da ferramenta.

O que é BIGDATA?

A quantidade de dados gerados aumentou muito com a popularização de computadores. A internet e os dispositivos móveis impulsionaram ainda mais essa quantidade de dados (redes sociais, e-commerce, domínios na web, imagens médicas, sistemas embarcados, etc.).

3vs-do-bigdata

  • A todo instante novos dados são gerados;
  • Produzidos em vários formatos; e
  • A quantidade que já é grande vai aumentar!

batman-on-bigdataVolume, variedade e velocidade são os 3Vs do BigData mas alguns autores defendem 4Vs (e recentemente até 5).

 

4-vs-of-big-data

Unidades de armazenamento de dados:

Bit  : Menor unidade de medida lógica (0 ou 1)
Byte (B)  : 8 bits
Kilobyte (KB)  : 1024 bytes
Megabyte (MB)  : 1024 KB
Gigabyte  (GB)  : 1024 MB
Terabyte  (TB)  : 1024 GB
Petabyte  (PB)  : 1024 TB
Exabyte  (EB)  : 1024 PB
Zettabyte (ZB)  : 1024 EB
Yottabyte (YB)  : 1024 ZB
Brontobyte (BB)  : 1024 YB

Só o Facebook gera 5PB/mês!

Como processar tamanha quantidade de dados? PARALELISMO !!! As mesmas tarefas são executadas sobre diferentes conjuntos de dados.

Em um cluster de computadores, cada computador (ou nó do cluster) gera informação sobre uma fração da base de dados. Com isso, o processamento se dá num tempo total inferior ao obtido àquele onde um único computador processaria todos os dados.

Pense em Big Data como conjuntos de dados realmente gigantes (petabytes ou maiores) e um processamento intenso sobre esse conjunto de dados.

O que é HADOOP?

Hadoop é um Framework que nos auxilia na tarefa nada trivial de processamento intenso dessas grandes massas de dados (petabytes ou maiores) removendo a complexidade da computação de alto desempenho e provendo um arcabouço para processamento e armazenamento em larga escala.

De código aberto (da Fundação Apache), implementado em Java, Inspirado no GFS e MapReduce do Google

Possui 2 componentes principais: o armazenamento de arquivo (Hadoop Distributed File System ou HDFS) e a estrutura de programação MapReduce. Há diversos projetos de suporte que aproveitam HDFS e MapReduce.  Falaremos mais sobre MapReduce nos próximos posts.

Em um cluster Hadoop, os dados são distribuidos pelos nós de forma replicada. quando um nó falha, o dado replicado que está no outro nó é copiado para o nó onde a falha ocorreu.

Em um SGDB, os dados são estruturados. Já no Hadoop, os dados são semiestruturados (organizado em celulas que podem conter qualquer tipo de dado – ex: planilhas eletrônicas) ou não estruturados (sem estrutura interna definida – ex: textos e imagens).

Os componentes do Hadoop

Alguns elementos interessantes para se estudar e que constituem um otimo arcabouço para um BigData:

  • HDFS: O Datanodes armazena seus dados e o Namenode controla onde seus dados são armazenadas.
  • MapReduce: é o modelo programático para Hadoop. Trabalha em duas fases (Map e Reduce).
  • Hadoop Streaming: utilitário que permite ao MapReduce codificar em qualquer linguagem: C, Perl, Python, C++, Bash etc.
  • Hive e Hue: se você gosta de SQL, é possível escrever em SQL e fazer com que o Hive o converta para um trabalho do MapReduce. você não vai ter um ambiente completo ANSI-SQL, mas obterá escalabilidade de diversos petabytes. Hue é uma interface web para executar seu trabalho de Hive.
  • Pig: um ambiente de programação para realização da codificação de MapReduce.
  • Sqoop: fornece transferência de dados bidirecional entre o Hadoop e seu banco de dados relacional favorito.
  • Oozie: gerencia o fluxo de trabalho do Hadoop. Não substitui suas ferramentas de BPM, mas fornece a ramificação se-então-senão e controle dentro de seus trabalhos do Hadoop.
  • HBase: Um armazenamento superescalável do tipo chave-valor. Funciona como um hashmap persistente. Não é um banco de dados relacional, apesar do nome HBase.
  • Mahout: aprendizado automático para Hadoop. Usado para análise preditiva e outras análises avançadas.
  • Fuse: faz o sistema HDFS parecer com um sistema de arquivos, de modo que você possa usar ls, rm, cd e outros comandos semelhantes ao linux em dados do HDFS
  • Zookeeper: usado para gerenciar a sincronização para o cluster.