primeira aplicacao big data
TRANSCRIPT
SÃO PAULO
Sua Primeira Aplicação de
Big Data na AWS
Regis Gimenis
AWS
Robson Rodrigues
Hotel Urbano
Big Data
Tecnologias e técnicas para trabalhar
produtivamente com dados em qualquer escala
Geração
de Dados
Captura
&
Armazenamento
Computação
&
Análise
Visualização
Amazon
S3
Amazon
Kinesis
Amazon
DynamoDB
Amazon
Redshift
Amazon
Elastic
MapReduce
Serviços de Big Data na AWS
Armazenamento de objetos
Qualquer tipo de arquivo
Escalabilidade
99.999999999% de durabilidadeAmazon S3
Processamento real-time
Alta desempenho, elástico
Fácil de usar
Integração com EMR, S3, Redshift, DynamoDBAmazon
Kinesis
Banco de dados NoSQL
Fácil escalabilidade
Administração zero
Latência de único dígitoAmazon
DynamoDB
Data Warehouse relacional
MPP – processamento paralelo massivo
Escalabilidade em PB
Completamente gerenciado
Custo de $1.000 / TB / ano
Amazon
Redshift
Hadoop como serviço
Hive, Pig, Impala, HBase
Fácil de usar, gerenciado
Uso de On-demand e Spot
Integração com S3, DynamoDB e Kinesis
Amazon
Elastic
MapReduce
Amazon
KinesisLo
gs d
os S
erv
ido
res
Amazon
EMR
Amazon S3
Amazon
Redshift
Visualização
e Análise
Caso de Uso – Análise de log de acesso
Log4J
Map Reduce
Parallel
Copy
EMR-Kinesis
ConnectorSQL Query
Kinesis Log4j
Appender
Exemplo do arquivo de log
Criação de stream no Amazon Kinesis
aws kinesis create-stream \
--stream-name AccessLogStream \
--shard-count 2
Configurar o Amazon Kinesis Log4J Appender
Baixar o Amazon Kinesis Log4j Appender:
http://emr-kinesis.s3.amazonaws.com/publisher/
Configurar arquivo awscredentials.properties:
accessKey=IAM-ACCESS-KEY
secretKey=IAM-SECRET-KEY
Capturar logs em um stream no Amazon Kinesis
Baixar o arquivo de exemplo de log Apache:
http://elasticmapreduce.s3.amazonaws.com/samples/
Executar o Amazon Kinesis Log4J Appender:
Criação de cluster no Amazon EMR
aws emr create-cluster \
--name ”CLUSTER-NAME" \
--instance-type m3.xlarge \
--instance-count 3 \
--region=AWS-REGION\
--ami-version 3.7.0 \
--ec2-attributes KeyName=KEY-NAME\
--no-auto-terminate \
--applications Name=Hive
Criar de bucket no Amazon S3
aws s3 mb s3://BUCKET-NAME
Criar de cluster no Amazon Redshift
aws redshift create-cluster \
--cluster-identifier CLUSTER-NAME\
--db-name DB-NAME\
--node-type dw2.large \
--cluster-type single-node \
--master-username MASTER-USER \
--master-user-password PASSWORD\
--publicly-accessible \
--port PORT-NUMBER
Amazon
KinesisLo
gs d
os S
erv
ido
res
Amazon
EMR
Amazon S3
Amazon
Redshift
Visualização
e Análise
Caso de Uso – Análise de log de acesso
Kinesis Log4j
Appender✔
✔ ✔ ✔
✔
Amazon EMR’s Hive
• Software para rodar consultas SQL-like (HiveQL) no Hadoop
• Schema on read: mapeia tabela para dados de entrada
• Acessa dados no Amazon S3, DynamoDB e Kinesis
• Consultar formatos complexos usando SerDe
• Transformar dados com User Defined Functions (UDF)
Configurar Hive para acessar Amazon Kinesis
> hive
hive> SET kinesis.accessKey=IAM-ACCESS-KEY;
hive> SET kinesis.secretKey=IAM-SECRET-KEY;
hive> SET kinesis.nodata.timeout=1;
hive> SET kinesis.endpoint.region=REGION;
hive> SET kinesis.retry.interval=1000;
hive> SET kinesis.retry.maxattempts=3;
Criar tabela Hive usando Amazon Kinesis
hive> CREATE TABLE apachelog_from_kinesis(
host STRING, identity STRING, user STRING,
request_time STRING, request STRING, status STRING,
size STRING, referrer STRING, agent STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^
\"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^
\"]*|\"[^\"]*\"))?"
)
STORED BY 'com.amazon.emr.kinesis.hive.KinesisStorageHandler'
TBLPROPERTIES("kinesis.stream.name"="AccessLogStream");
Testar Amazon EMR lendo do Amazon Kinesis
-- return the first row in the stream
hive> SELECT * FROM apachelog_from_kinesis LIMIT 1;
-- return count all items in the Stream
hive> SELECT COUNT(1) FROM apachelog_from_kinesis;
-- return count of all rows with given host
hive> SELECT COUNT(1) FROM apachelog_from_kinesis
WHERE host="66.249.67.3”;
Criar uma tabela externa no Amazon S3
hive> CREATE EXTERNAL TABLE apachelog_to_s3 (
request_time STRING, host STRING,
request STRING, status INT,
referrer STRING, agent STRING
)
PARTITIONED BY (hour STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://BUCKET-NAME/emroutput';
Configurar Hive para particionar arquivos
hive>
hive>
Configurar Hive para compactar arquivos
hive>
hive>
hive>
hive>
Rodar consulta Hive e gravar no Amazon S3
hive> INSERT OVERWRITE TABLE apachelog_to_s3 PARTITION (hour)
SELECT
from_unixtime(unix_timestamp(request_time,
'[dd/MMM/yyyy:HH:mm:ss Z]')),
host,
request,
status,
referrer,
agent,
hour(from_unixtime(unix_timestamp(request_time,
'[dd/MMM/yyyy:HH:mm:ss Z]'))) as hour
FROM apachelog_from_kinesis;
Amazon
KinesisLo
gs d
os S
erv
ido
res
Amazon
EMR
Amazon S3
Amazon
Redshift
Visualização
e Análise
Caso de Uso – Análise de log de acesso
✔ ✔ ✔
✔
Kinesis Log4j
Appender✔
Map Reduce
EMR-Kinesis
Connector✔ ✔
Listar os arquivos no Amazon S3
aws s3 ls s3://BUCKET-NAME/emroutput/
Conectar ao Amazon Redshift
Criar tabela no Amazon Redshift
CREATE TABLE apachelog (
request_time timestamp,
host varchar(50),
request varchar(1024),
status int,
referrer varchar(1024),
agent varchar(1024)
)
DISTKEY(host)
SORTKEY(request_time);
Carregar dados no Amazon Redshift
COPY apachelog
FROM 's3://BUCKET-NAME/emroutput'
CREDENTIALS
'aws_access_key_id=IAM-ACCESS_KEY;
aws_secret_access_key=IAM-SECRET-KEY'
DELIMITER '\t' IGNOREHEADER 0
MAXERROR 0
GZIP;
Consultar dados no Amazon Redshift
-- mostrar requests de um determinado endereço IP
SELECT host, request FROM apachelog
WHERE host = '66.249.67.3';
-- contar todos requests de um determinado dia
SELECT COUNT(1) FROM apachelog
WHERE request_time LIKE '2009-07-21%';
-- mostrar requests encaminhados de outros sites
SELECT * FROM apachelog
WHERE referrer NOT LIKE '\"-\"';
Visualizar os dados do Amazon Redshift
Amazon
KinesisLo
gs d
os S
erv
ido
res
Amazon
EMR
Amazon S3
Amazon
Redshift
Visualização
e Análise
Caso de Uso – Análise de log de acesso
✔ ✔ ✔
✔
Kinesis Log4j
Appender✔
Map Reduce
EMR-Kinesis
Connector✔ ✔SQL Query✔
✔
Hotel Urbano
Sobre o Hotel Urbano
• A maior agência de viagens
online do Brasil
• 1 diária a cada 8 segundos
• 180 mil hotéis, 35 mil destinos
em 183 países
• 18 milhões de clientes
“Poder e
Confiabilidade Com a AWS podemos
focar no nosso negócio e
Confiar”
- Bruno Pereira ex-CTO
do Hotel Urbano
Oportunidades em Big Data
• Entender os nossos viajantes
• Ajudar os nossos parceiros (Hotéis /
Pousadas/ Resorts)
• Recomendar a viagem certa para o
Viajante certo
• Predizer demandas
• Analisar dados brutos: Insights
Conversão
Desafios
• Processar logs de acesso e iterações com
• Gerar recomendações para milhões de
clientes
• Cruzar dados de diversas fontes
• Disponibilizar dados
Arquitetura inicial
Desafios da primeira arquitetura
• Manutenção do cluster
• Suporte a usuários
• Instabilidade de alguns serviços
• Custo
Arquitetura atual
SÃO PAULO