Top Banner
Hadoop y Hive en AWS Cómo analizar terabytes de datos y no morir en el intento domingo 4 de noviembre de 2012
36

Emr hive barcamp 2012

Jul 04, 2015

Download

Documents

Ezequiel Golub

Introducción super rapida al mundo de hadoop montado sobre amazon web services
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Emr hive   barcamp 2012

Hadoop y Hive en AWS

Cómo analizar terabytes de datos y no morir en el intento

domingo 4 de noviembre de 2012

Page 2: Emr hive   barcamp 2012

Quién soy yo?

• Ezequiel Golub

• Desarrollador en Smowtion

• Hace más de un año que implementamos Hadoop

domingo 4 de noviembre de 2012

Page 3: Emr hive   barcamp 2012

Qué es Hadoop?

• Framework para aplicaciones distribuidas en miles de nodos

• Ahora familia de productos, pero en su core son 2:

• HDFS

• Map/Reduce

• Proyecto de apache.org

domingo 4 de noviembre de 2012

Page 4: Emr hive   barcamp 2012

Limitaciones de RDBMS

• Datasets de petabytes

• no escalan horizontalmente

• Escalar horizontalmente = chau ACID

• Particionar y shardear es dificil.

• Rendimiento de lecturas o escrituras: Elegí una.

• Usar hardware especializado = $$$!!

domingo 4 de noviembre de 2012

Page 5: Emr hive   barcamp 2012

Por qué Hadoop?

• Da respuesta las limitaciones de las RDBMS

• Escalabilidad horizontal

• Confiabilidad

• Apoyo de comunidad

• Map/Reduce

• Orientado a procesos batch para datos “grandes”

• AWS

domingo 4 de noviembre de 2012

Page 6: Emr hive   barcamp 2012

Quienes lo usan?domingo 4 de noviembre de 2012

Page 7: Emr hive   barcamp 2012

Cuándo usar Hadoop?

• Demasiados datos para que entren en algun tipo de datastore comodamente

• Datos desestructurados

• Y necesitas analizarlos!

• Y necesitas alta disponibilidad!

• Suficientes datos para que analizarlos en una sola maquina sea dificil

domingo 4 de noviembre de 2012

Page 8: Emr hive   barcamp 2012

HDFS

• Sistema de archivos distribuido, redundante y con alta disponibilidad.

• Soporta archivos muy grandes.

• Pensado para commodity hardware

• Acceso streaming de baja latencia y alta transferencia.

domingo 4 de noviembre de 2012

Page 9: Emr hive   barcamp 2012

HDFS - Ventajas

• Tolerancia a los fallos

• Autoregenerativo

• Escalable

• Confiabilidad

• Soporte

domingo 4 de noviembre de 2012

Page 10: Emr hive   barcamp 2012

Map/Reduce

• Paradigma de programación distribuida

• Basada en un paper de Google (http://bit.ly/gXZbsk)

• Modelada a partir de las ideas de programación funcional

• Distribuible en N nodos

• map() -> reduce()

• La etapa de reduce se inicia cuando todos los mappers terminan.

domingo 4 de noviembre de 2012

Page 11: Emr hive   barcamp 2012

Map/Reduce

• Dos pasos secuenciales

• Map: Toma todas las lineas de un input, y por cada una, las procesa y devuelve un par de key valor

• Reduce: Recibe secuencialmente un key valor, los procesa y emite un resultado (ej: otro k-v)

domingo 4 de noviembre de 2012

Page 12: Emr hive   barcamp 2012

import hadoopy

def mapper(key, value): for word in value.split(): yield word, 1

def reducer(key, values): accum = 0 for count in values: accum += int(count) yield key, accum

if __name__ == "__main__": hadoopy.run(mapper, reducer, doc=__doc__)

M/R: WC en Python

$ echo "a b a a b c" | python wc.py map | sort | python wc.py reducea 3b 2c 1

wc.py

Probandolo localmente!

** usando el modulo Hadoopy para usar python con Hadoop!

domingo 4 de noviembre de 2012

Page 13: Emr hive   barcamp 2012

Ejemplo: wordcount

Muchos archivos

mapper

mapper

mapper

mapper<arch2.parte2>

<arch2.parte1>

<arch1.part2>

<arch1.part1>{‘foo’:12,‘bar’:13,‘baz’:19}

{‘foo’:33,‘bar’:23,‘baz’:42}

{‘foo’:1,‘bar’:0,‘baz’:99}

{‘foo’:55,‘bar’:43,‘baz’:65}

Reducer

Reducer

Reducer

Ordenar y

agrupar por key

{‘foo’:[12,33,1,55]}

{‘bar’:[13,23,0,43]}

{‘baz’:[19,42,99,65]}

count()

count()

count()

count()

sum()

sum()

sum()

{‘foo’:101,‘bar’:79,‘baz’:218}

domingo 4 de noviembre de 2012

Page 14: Emr hive   barcamp 2012

M/R en Hadoop

• Las tareas de M/R son entregadas como un “job”

• Los “jobs” se asignan a una cola especifica de trabajo

• Los jobs son “rack-aware”: aprovecharse del “data locality”

• Cada “job” es divido en N “tasks”

• Streaming: No usar Java para M/R

• Las tareas que fallen son reiniciadas automaticamente.

domingo 4 de noviembre de 2012

Page 15: Emr hive   barcamp 2012

M/R: Implementación

• M/R es excelente para los problemas donde los ‘sub-problemas’ no son interdependientes

• Nada se comparte entre mappers y reducers, ni siquiera si corren en el mismo nodo

• X ej: La salida de un mapper no puede depender de la salida o comunicación con otro mapper

domingo 4 de noviembre de 2012

Page 16: Emr hive   barcamp 2012

Amazon Web Services

• Crear servidores virtuales dinamicamente.

• Pagas solo por las horas que usas

• Podes ‘apagar’ y ‘prender’ maquinas en cualquier momento

domingo 4 de noviembre de 2012

Page 17: Emr hive   barcamp 2012

AWS: Servicios clave

• EC2: Servidores virtuales

• S3: Servicio de data-storage

• EMR: Hadoop on demand

domingo 4 de noviembre de 2012

Page 18: Emr hive   barcamp 2012

Elastic Map Reduce

• Proveen un cluster configurado con los ultimos patches + un poco de magia extra

• Interactua nativamente con S3

• Podes agregar o sacar servers del cluster dinamicamente

domingo 4 de noviembre de 2012

Page 19: Emr hive   barcamp 2012

Elastic Map Reduce

• Al crear el server, se lo puede acceder igual que cualquier otro server virtual

• Bootstrap actions permiten customizar el master o slaves

• Los cluster pueden ser persistente o efimeros

• 2 instance groups: CORE y TASK

domingo 4 de noviembre de 2012

Page 20: Emr hive   barcamp 2012

domingo 4 de noviembre de 2012

Page 21: Emr hive   barcamp 2012

domingo 4 de noviembre de 2012

Page 22: Emr hive   barcamp 2012

domingo 4 de noviembre de 2012

Page 23: Emr hive   barcamp 2012

domingo 4 de noviembre de 2012

Page 24: Emr hive   barcamp 2012

domingo 4 de noviembre de 2012

Page 25: Emr hive   barcamp 2012

domingo 4 de noviembre de 2012

Page 26: Emr hive   barcamp 2012

Elastic Map Reduce

Ejemplos desde la consola:

# Bajar el instance group TASK a cero instancias

shell# elastic-mapreduce --jobflow j-XXXXX --modify-instance-group TASK --instance-count 0

domingo 4 de noviembre de 2012

Page 27: Emr hive   barcamp 2012

Hive: Qué es?

• SQL sobre hadoop

• Traducir Pseudosql a tareas Map/Reduce

• Maneja datos a escala “Hadoop”

• Puede usar logfiles como source data

• WC en Hive: • SELECT COUNT(*) as freq, word FROM words GROUP by word;

domingo 4 de noviembre de 2012

Page 28: Emr hive   barcamp 2012

Access log - crear tablaCREATE EXTERNAL TABLE access_log(ip STRING, host STRING, finishtime STRING, uri STRING, return_code STRING,bytes STRING, referrer STRING, user_agent STRING, quality STRING)comment 'data logs uploaded from servers'PARTITIONED by (  year string,  month string,  day string,  hour string,  minute string)ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'WITH SERDEPROPERTIES (  "input.regex" = '(.+?) (.+?) - (.+) \"(.+?)\" ([0-9]+) ([0-9]+) \"(.+)\" \"(.+)\" \"(.+)\"',  "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s")STORED AS TEXTFILELOCATION 's3n://somebucket/acceslog_dir/';

domingo 4 de noviembre de 2012

Page 29: Emr hive   barcamp 2012

Ejemplo con CSVCREATE EXTERNAL TABLE page_view( viewTime INT, userid BIGINT, url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the User', country STRING COMMENT 'country of origination')ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS TEXTFILELOCATION 's3n://somebucket/page_views';

domingo 4 de noviembre de 2012

Page 30: Emr hive   barcamp 2012

Queries# Conteo de hits x url para Nov 2012SELECT count(*) as count, uri FROM access_logWHERE year = 2012 and month = 11GROUP by uri ORDER by uri DESC;

# subqueries # tablas: users, action_video y action_comment # salida: una lista con todas las acciones de todos los usuarios y sus fechas

SELECT u.id, actions.name, actions.date FROM ( SELECT av.uid AS uid, ‘video publicado’ as name FROM action_video av WHERE av.date = '2008-06-03' UNION ALL SELECT ac.uid AS uid, ‘comentario publicado’ as name FROM action_comment ac WHERE ac.date = '2008-06-03' ) actions JOIN users u ON (u.id = actions.uid)

# insertar la salida del query en s3INSERT OVERWRITE DIRECTORY ‘s3n://somebucket/somedir’SELECT * FROM access_log where uri = ‘http://example.com’

domingo 4 de noviembre de 2012

Page 31: Emr hive   barcamp 2012

Limitaciones

• No implementa todo el SQL.

• Algunas cosas se hacen de manera rara (group by)

• Miles de archivos de salida.

• Map/Reduce es inherementente lento

• Puede ser adictivo

domingo 4 de noviembre de 2012

Page 32: Emr hive   barcamp 2012

Tips

• Particionar las tablas (s3://bucket/access/y=2012/m=11/d=4/h=1)

• Crear sets de prueba con pocos datos

• Crear varias tablas para distintos queries

• Tabla => Query => Tabla => Query

• Borrar los datos que no usas en S3!

domingo 4 de noviembre de 2012

Page 33: Emr hive   barcamp 2012

Precios?

• Cluster tipico

• Master: small (u$s 0.09/hora) x 1

• Slaves: c1.medium u$s 0.2/hora x 2

• Total: u$s 0.49 x hora

• S3: u$s 0.125 x gb (muy aprox)

domingo 4 de noviembre de 2012

Page 34: Emr hive   barcamp 2012

En Smowtion?

• 70 gb x dia entre datos propios y de partners

• Hive funciona como datawarehouse y como parte del pipeline de datos:

domingo 4 de noviembre de 2012

Page 35: Emr hive   barcamp 2012

Cómo seguir?

• Cloudera.com

• Hadoop.apache.org

• http://developer.yahoo.com/hadoop/tutorial/

• http://aws.amazon.com/developertools/2264 (AWS command line Ruby Client)

• https://cwiki.apache.org/confluence/display/Hive/LanguageManual (hive lang manual)

domingo 4 de noviembre de 2012

Page 36: Emr hive   barcamp 2012

Preguntas?

• @ezegolub

[email protected]

domingo 4 de noviembre de 2012