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

Emr hive barcamp 2012

Embed Size (px)

DESCRIPTION

Introducción super rapida al mundo de hadoop montado sobre amazon web services

Citation preview

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