como construir sua primeira aplicação de big data na aws

53
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Hugo Rozestraten, Arquiteto de Soluções 14 de Setembro de 2016 Criação do seu primeiro aplicativo de big data na AWS

Upload: amazon-web-services-latam

Post on 07-Jan-2017

436 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Como construir sua primeira aplicação de Big Data na AWS

© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Hugo Rozestraten, Arquiteto de Soluções

14 de Setembro de 2016

Criação do seu primeiro aplicativo de big data na AWS

Page 2: Como construir sua primeira aplicação de Big Data na AWS

Amazon S3

Amazon Kinesis

Amazon DynamoDB

Amazon RDS (Aurora)

AWS Lambda

KCL Apps

Amazon EMR

Amazon Redshift

Amazon MachineLearning

Coletar Processar AnalisarArmazenar

Coleta de dadose armazenamento

Processamentode dados

Processamentode eventos

Análise de dados

Dados Respostas

Ecossistema de big data na AWS

Page 3: Como construir sua primeira aplicação de Big Data na AWS

Seu primeiro aplicativo de big data na AWSR

egis

tros

Kinesis EMR RedshiftS3

?

Page 4: Como construir sua primeira aplicação de Big Data na AWS

Ecossistema de big data na AWS - Coletar

Kinesis

Reg

istro

s

S3

Coletar Processar AnalisarArmazenar

Dados Respostas

EMR

Page 5: Como construir sua primeira aplicação de Big Data na AWS

Ecossistema de big data na AWS - Processar

EMRS3

Coletar Processar

AnalisarArmazenar

Dados Respostas

Page 6: Como construir sua primeira aplicação de Big Data na AWS

Ecossistema de big data na AWS - Analisar

S3 Redshift

Coletar Processar

AnalisarArmazenar

Dados Respostas

SQL

Page 7: Como construir sua primeira aplicação de Big Data na AWS

Configuração

Page 8: Como construir sua primeira aplicação de Big Data na AWS

Recursos

1. Interface da linha de comando da AWS (aws-cli) configurada

2. Fluxo do Amazon Kinesis com um único fragmento

3. Bucket do Amazon S3 para manter os arquivos

4. Cluster do Amazon EMR (dois nós) com Spark e Hive

5. Cluster de data warehouse do Amazon Redshift (nó único)

Page 9: Como construir sua primeira aplicação de Big Data na AWS

Amazon Kinesis

Criar um fluxo do Amazon Kinesis para manter os dados de entrada:

aws kinesis create-stream \ --stream-name AccessLogStream \ --shard-count 1

Page 10: Como construir sua primeira aplicação de Big Data na AWS

Amazon S3

Criar um bucket do Amazon S3 para manter os arquivos para processamento do Amazon EMR, e arquivos de entrada para o Amazon Redshift:

aws s3 mb s3://NOME DO SEU BUCKET

Page 11: Como construir sua primeira aplicação de Big Data na AWS

Amazon EMR

Iniciar um cluster de três instâncias com Spark e Hive instalados:

aws emr create-cluster \ --name "demo" \ --instance-type m3.xlarge \ --instance-count 2 \ --region=SUA REGIÃO DA AWS \ --release-label emr-4.0.0 \ --ec2-attributes KeyName=SUA CHAVE SSH DA AWS \ --use-default-roles \ --applications Name=Hive Name=Spark

Page 12: Como construir sua primeira aplicação de Big Data na AWS

Amazon Redshift

Criar data warehouse do Amazon Redshift de nó único:

aws redshift create-cluster \ --cluster-identifier demo \ --db-name demo \ --node-type dc1.large \ --cluster-type single-node \ --master-username master \ --master-user-password ESCOLHA UMA SENHA DO REDSHIFT \ --publicly-accessible \ --port 8192

Page 13: Como construir sua primeira aplicação de Big Data na AWS

Seu primeiro aplicativo de big data na AWS

Reg

istro

s

1. COLETAR: Fluxo de dados para o Kinesis com Log4J

2. PROCESSAR: Processar dadoscom EMR usando Spark e Hive

Kinesis

EMRS3

Redshift

3. ANALISAR: Analisar dados no Redshift usando SQL

ARMAZENAR

SQL

Page 14: Como construir sua primeira aplicação de Big Data na AWS

1. Coletar

Page 15: Como construir sua primeira aplicação de Big Data na AWS

Amazon Kinesis Log4J Appender

Baixe o Log4J Appender:

wget http://emr-kinesis.s3.amazonaws.com/publisher/\kinesis-log4j-appender-1.0.0.jar

Baixe e salve o arquivo de registro Apache de amostra:

wget http://elasticmapreduce.s3.amazonaws.com/samples/\pig-apache/input/access_log_1

Page 16: Como construir sua primeira aplicação de Big Data na AWS

Amazon Kinesis Log4J Appender

Arquivo de credenciais AwsCredentials.properties com estas credenciais o usuário do IAM que tenha permissão para acesso ao Amazon Kinesis:

accessKey=YOUR-IAM-ACCESS-KEYsecretKey=YOUR-SECRET-KEY

Então inicie o Amazon Kinesis Log4J Appender:

java -cp .:kinesis-log4j-appender-1.0.0.jar \com.amazonaws.services.kinesis.log4j.FilePublisher \access_log_1 &

Page 17: Como construir sua primeira aplicação de Big Data na AWS
Page 18: Como construir sua primeira aplicação de Big Data na AWS

Formato do arquivo de registro

75.35.230.210 - - [20/Jul/2009:22:22:42 -0700] "GET /images/pigtrihawk.jpg HTTP/1.1" 200 29236 "http://www.swivel.com/graphs/show/1163466" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)"

Page 19: Como construir sua primeira aplicação de Big Data na AWS

Spark

•Mecanismo rápido e básico para processamento de dados em grande escala

•Grave aplicativos rapidamente em Java, Scala ou Python

•Combine SQL, streaming e análises complexas.

Page 20: Como construir sua primeira aplicação de Big Data na AWS

Uso do Spark no EMR

Use SSH para fazer login no cluster:

ssh -i SUA CHAVE SSH DA AWS NOME DO HOST DO EMR

Inicie o shell do Spark:

spark-shell --jars /usr/lib/spark/extras/lib/spark-streaming-kinesis-asl.jar,amazon-kinesis-client-1.5.1.jar

Page 21: Como construir sua primeira aplicação de Big Data na AWS

Amazon Kinesis e streaming do Spark

Produtor AmazonKinesis

AmazonS3

DynamoDB

KCL

O streaming do Spark usa KCL para o Kinesis

AmazonEMR

O aplicativo de streaming do Spark para ler do Kinesis e gravar no S3

Page 22: Como construir sua primeira aplicação de Big Data na AWS

Streaming do Spark - Leitura do Kinesis

/* Setup the KinesisClient */val kinesisClient = new AmazonKinesisClient(new DefaultAWSCredentialsProviderChain())

/* Determine the number of shards from the stream */val numShards = kinesisClient.describeStream(streamName).getStreamDescription().getShards().size()

/* Create a streaming context and then create one worker per shard */val ssc = new StreamingContext(sc, outputInterval)val kinesisStreams = (0 until numShards).map { i => KinesisUtils.createStream(ssc, streamName, endpointUrl,outputInterval,InitialPositionInStream.LATEST, StorageLevel.MEMORY_ONLY)}

Page 23: Como construir sua primeira aplicação de Big Data na AWS

Streaming do Spark - Gravação no S3

/* Merge the worker Dstreams and translate the byteArray to string */val unionStreams = ssc.union(kinesisStreams)val accessLogs = unionStreams.map(byteArray => new String(byteArray))

/* Write each RDD to Amazon S3*/accessLogs.foreachRDD( (rdd,time) => { if (rdd.count > 0) { val outPartitionFolder = new java.text.SimpleDateFormat("'year='yyyy/'month='MM/'day='dd/'hour='hh/'min='mm").format(new Date(time.milliseconds)) rdd.saveAsTextFile("%s/%s".format(outputDir,outPartitionFolder),classOf[GzipCodec])}})

Page 24: Como construir sua primeira aplicação de Big Data na AWS
Page 25: Como construir sua primeira aplicação de Big Data na AWS

Visualizar os arquivos de saída no Amazon S3Liste todos os prefixos de partição:

aws s3 ls s3://SEU BUCKET DO S3/access-log-raw/ --recursive

Liste todos os arquivos de saída:

aws s3 ls s3://SEU BUCKET DO S3/access-log-raw/year=aaaa/month=mm/day=dd/hour=HH/

Page 26: Como construir sua primeira aplicação de Big Data na AWS
Page 27: Como construir sua primeira aplicação de Big Data na AWS

2. Processar

Page 28: Como construir sua primeira aplicação de Big Data na AWS

Hive do Amazon EMR

Adapta a consulta como SQL (HiveQL) para execução no Hadoop

Esquema na leitura: mapeie a tabela para os dados de entrada

Acessar dados em Amazon S3, Amazon DymamoDB e Amazon Kinesis

Consultar formatos de entrada complexos usando SerDe

Transformar dados com funções definidas pelo usuário (UDF)

Page 29: Como construir sua primeira aplicação de Big Data na AWS

Uso do Hive no Amazon EMR

Use SSH para fazer login no cluster:

ssh -i SUA CHAVE SSH DA AWS NOME DO HOST DO EMR

Iniciar Hive:

hive

Page 30: Como construir sua primeira aplicação de Big Data na AWS

Criar uma tabela que aponte para o bucket do Amazon S3

CREATE EXTERNAL TABLE access_log_raw( host STRING, identity STRING, user STRING, request_time STRING, request STRING, status STRING, size STRING, referrer STRING, agent STRING)PARTITIONED BY (year INT, month INT, day INT, hour INT, min INT)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'WITH SERDEPROPERTIES ( "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?") LOCATION 's3://SEU BUCKET DO S3/access-log-raw';

msck repair table access_log_raw;

Page 31: Como construir sua primeira aplicação de Big Data na AWS
Page 32: Como construir sua primeira aplicação de Big Data na AWS

Processar dados usando o Hive

Transformaremos os dados que são retornados pela consulta antes de gravá-los na tabela Hive externa armazenada no Amazon S3

Funções definidas pelo usuário (UDF) do Hive em uso para as transformações de texto: from_unixtime, unix_timestamp e hour

O valor de "hour" é importante: ele é usado para dividir e organizar os arquivos de saída antes de gravar no Amazon S3. Com essas divisões, podemos carregar os dados com mais eficiência no Amazon Redshift depois no laboratório com o comando "COPY" paralelo

Page 33: Como construir sua primeira aplicação de Big Data na AWS

Criar uma tabela Hive externa no Amazon S3

CREATE EXTERNAL TABLE access_log_processed ( 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://SEU BUCKET DO S3/access-log-processed';

Page 34: Como construir sua primeira aplicação de Big Data na AWS

Configurar partição e compactação

-- configurar "particionamento dinâmico" do Hive-- isso dividirá os arquivos de saída ao gravar no Amazon S3SET hive.exec.dynamic.partition.mode=nonstrict;SET hive.exec.dynamic.partition=true;

-- compactar arquivos de saída no Amazon S3 usando GzipSET mapred.output.compress=true;SET hive.exec.compress.output=true;SET mapred.output.compression.codec= org.apache.hadoop.io.compress.GzipCodec;SET io.compression.codecs= org.apache.hadoop.io.compress.GzipCodec;

Page 35: Como construir sua primeira aplicação de Big Data na AWS

Consultar Hive e gravar saída no Amazon S3

-- converter carimbo de data/hora do registro do Apache em um carimbo de data/hora do UNIX-- dividir arquivos no Amazon S3 pela hora nas linhas do registroINSERT OVERWRITE TABLE access_log_processed 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]'))) como hora FROM access_log_raw;

Page 36: Como construir sua primeira aplicação de Big Data na AWS
Page 37: Como construir sua primeira aplicação de Big Data na AWS

Visualização do status da tarefahttp://127.0.0.1/9026

Page 38: Como construir sua primeira aplicação de Big Data na AWS

Visualizar os arquivos de saída no Amazon S3

Liste todos os prefixos de partição:

aws s3 ls s3://SEU BUCKET DO S3/access-log-processed/

Liste um dos arquivos de saída divididos:

aws s3 ls s3://SEU BUCKET DO S3/access-log-processed/hour=22/

Page 39: Como construir sua primeira aplicação de Big Data na AWS
Page 40: Como construir sua primeira aplicação de Big Data na AWS

Spark SQL

Módulo do Spark para trabalhar com dados estruturados usando SQL

Execute consultas Hive não modificadas nos dados existentes.

Page 41: Como construir sua primeira aplicação de Big Data na AWS

Uso do Spark-SQL no Amazon EMR

Use SSH para fazer login no cluster:

ssh -i SUA CHAVE SSH DA AWS NOME DO HOST DO EMR

Iniciar Hive:

spark-sql

Page 42: Como construir sua primeira aplicação de Big Data na AWS

Consultar os dados com o Spark

-- retornar a primeira linha no fluxoSELECT * FROM access_log_raw LIMIT 1;

-- retornar todos os itens contados no fluxoSELECT COUNT(1) FROM access_log_raw ;

-- encontrar os 10 hosts principaisSELECT host, COUNT(1) FROM access_log_raw GROUP BY host ORDER BY 2 DESC LIMIT 10;

Page 43: Como construir sua primeira aplicação de Big Data na AWS
Page 44: Como construir sua primeira aplicação de Big Data na AWS

3. Analisar

Page 45: Como construir sua primeira aplicação de Big Data na AWS

Conectar ao Amazon Redshift

# using the PostgreSQL CLIpsql -h ENDPOINT DO REDSHIFT \ -p 8192 -U master demo

Ou use qualquer cliente JDBC ou ODBC SQL com os drivers PostgreSQL 8.x ou suporte nativo do Redshift

• Aginity Workbench para Amazon Redshift• SQL Workbench/J

Page 46: Como construir sua primeira aplicação de Big Data na AWS

Criar uma tabela do Amazon Redshift para manter os dadosCREATE TABLE accesslogs ( request_time timestamp, host varchar(50), request varchar(1024), status int, referrer varchar(1024), agent varchar(1024))DISTKEY(host)SORTKEY(request_time);

Page 47: Como construir sua primeira aplicação de Big Data na AWS

Carregamento de dados no Amazon Redshift

O comando "COPY" carrega arquivos paralelamente

COPY accesslogs FROM 's3://SEU BUCKET DO S3/access-log-processed' CREDENTIALS 'aws_access_key_id=SUA CHAVE DE ACESSO DO IAM; aws_secret_access_key=SUA CHAVE SECRETA DO IAM'DELIMITER '\t' IGNOREHEADER 0 MAXERROR 0 GZIP;

Page 48: Como construir sua primeira aplicação de Big Data na AWS
Page 49: Como construir sua primeira aplicação de Big Data na AWS
Page 50: Como construir sua primeira aplicação de Big Data na AWS

Consultas de teste do Amazon Redshift

-- encontrar distribuição de códigos de status ao longo dos diasSELECT TRUNC(request_time),status,COUNT(1) FROM accesslogs GROUP BY 1,2 ORDER BY 1,3 DESC;

-- encontrar os códigos de status 404SELECT COUNT(1) FROM accessLogs WHERE status = 404;

-- mostrar todas as solicitações de status como PÁGINA NÃO ENCONTRADASELECT TOP 1 request,COUNT(1) FROM accesslogs WHERE status = 404 GROUP BY 1 ORDER BY 2 DESC;

Page 51: Como construir sua primeira aplicação de Big Data na AWS

Seu primeiro aplicativo de big data na AWSR

egi

stro

s

Kinesis EMR RedshiftS3

Um favicon corrigiria 398 dos 977 erros de PÁGINA NÃO ENCONTRADA (404) no total

Page 52: Como construir sua primeira aplicação de Big Data na AWS

... pelo mesmo preço de uma xícara de café

Experimente na nuvem AWS...

Serviço Custo estimado*

Amazon Kinesis $1.00

Amazon S3 (nível gratuito) $0

Amazon EMR $0.44

Amazon Redshift $1.00

Total estimado $2.44*O custo estimado presume: uso do nível gratuito onde disponível, instâncias de custo mais baixo, conjunto de dados com no máximo 10 MB e instâncias em execução por menos de 4 horas. Os custos podem variar dependendo das opções selecionadas, do tamanho do conjunto de dados e do uso.

$3.50

Page 53: Como construir sua primeira aplicação de Big Data na AWS

Obrigado

Blog de Big Data da AWSblogs.aws.amazon.com/bigdata