quinta-feira, 21 de julho de 2016

AWS - Big Data - Parte 1


A melhor definição de Big Data que eu ouvi, dizia que Big Data é aquele tipo/volume de dado que não é possível/viável de ser tratado na sua estação de trabalho. E vejo diversas pessoas com dúvidas e se perguntando, como que isso pode ser utilizado no seu dia-a-dia.


Então para trazer um caso de uso e exemplo, vamos falar de logs. Eu que trabalho na área de infra, administro diversos servidores que geram muitas linhas de log. Se pensarmos em ambiente AWS, onde uma máquina pode durar menos de 1 hora, fica difícil você tratar e identificar padrões nesses logs.

Pensando nisso, vamos criar uma solução de Big Data, que irá coletar logs de servidores, convertê-los em um formato SQLizado e carregar em uma solução de Data Warehouse quando necessário. Tudo isso por um custo baixo. Eu diria que isso pode ficar mais barato que um café, mas como isso não vale na nossa realidade tupiniquim, deixo essa afirmação para os nossos amigos gringos.

Esse post está baseado em uma apresentação que ocorreu no re:invent da AWS em 2015 e pode ser assistido aqui. Já existe uma versão mais atualizada, onde é usado o Firehose. Isso será tema de uma nova postagem. Mas caso você queira ver a apresentação atualizada, segue o link.

O post será dividido em 3 partes:
  1. Setup ambiente
  2. Coleta de dados
  3. Processamento e Análise de dados

Serviços:

Primeiro vamos apresentar os serviços da Amazon que vão compor a nossa solução, mais informações cliquem sobre o link:

Processamento de dados:
Armazenamento e coleta de dados:
A solução seguirá o seguinte fluxo:


Kinesis:
Vamos lá, primeiro vamos criar o shard do Kinesis, você pode criar usando linha de comando:

aws kinesis create-stream \
  --stream-name AccessLogStream \
  --shard-count 1
ou pelo console em Kinesis -> Go to Kinesis Stream -> Create Stream:


O kinesis receberá o log dos nossos servidores, os logs ficarão até 24 horas a disposição da aplicação que vai tratá-los. Caso aumente o número de servidores, devemos aumentar o número de shards. 
OBS: Para este exemplo o nome tem que ser AccessLogStream

S3:
Vamos criar um bucket para armazenar os nossos logs:

CLI:
aws s3 mb s3://escolha_o_nome_do_seu_bucket

Console:

S3 -> Create Bucket:


EMR:
O cluster EMR será responsável por pegar os logs, tratá-los e devolvê-los ao Bucket S3. A principal função dele no nosso caso é de estruturar o dado que está sendo recebido.

CLI:
aws emr create-cluster \
  --name "demo" \
  --instance-type m3.xlarge \
  --instance-count 2 \
  --release-label emr-4.6.0 \
  --ec2-attributes KeyName=SUA_CHAVE_SSH \
  --use-default-roles \
  --applications Name=Hive Name=Spark

Console:

EMR -> Create Cluster -> Go to advanced options

Passo 1:
 Passo 2:

Passo 3:

Passo 4:



Redshift:
Um Data Warehouse gerenciado e escalável. Ele receberá os nossos logs já estrutudados, para que os dados sejam analisados.

CLI:
aws redshift create-cluster \  --cluster-identifier demo \  --db-name demo \  --node-type dc1.large \  --cluster-type single-node \  --master-username master \  --master-user-password DEFINA_A_SUA_SENHA \  --publicly-accessible \  --port 8192

Console:
Redshift -> Launch Cluster

Passo 1:
 Passo 2:
 Passo 3:
 Passo 4:

Agora que o nosso ambiente está configurado vamos para a parte 2.


Nenhum comentário: