Emr hive barcamp 2012

398
-1

Published on

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

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
398
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Emr hive barcamp 2012

  1. 1. Hadoop y Hive en AWS Cómo analizar terabytes de datos y no morir en el intentodomingo 4 de noviembre de 2012
  2. 2. Quién soy yo? • Ezequiel Golub • Desarrollador en Smowtion • Hace más de un año que implementamos Hadoopdomingo 4 de noviembre de 2012
  3. 3. 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.orgdomingo 4 de noviembre de 2012
  4. 4. 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
  5. 5. 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” • AWSdomingo 4 de noviembre de 2012
  6. 6. Quienes lo usan?domingo 4 de noviembre de 2012
  7. 7. 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 dificildomingo 4 de noviembre de 2012
  8. 8. 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
  9. 9. HDFS - Ventajas • Tolerancia a los fallos • Autoregenerativo • Escalable • Confiabilidad • Soportedomingo 4 de noviembre de 2012
  10. 10. 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
  11. 11. 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
  12. 12. wc.py M/R: WC en Python import hadoopy ** usando el modulo Hadoopy para usar python def mapper(key, value): con Hadoop! 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__) Probandolo localmente! $ echo "a b a a b c" | python wc.py map | sort | python wc.py reduce a 3 b 2 c 1domingo 4 de noviembre de 2012
  13. 13. Ejemplo: wordcount {‘foo’:12, <arch1.part1> mapper ‘bar’:13, ‘baz’:19} {‘foo’:[12,33,1,55]} count() Reducer sum() {‘foo’:33, <arch1.part2> mapper ‘bar’:23, ‘baz’:42} {‘bar’:[13,23,0,43]} count() Ordenar {‘foo’:101, Muchos y Reducer ‘bar’:79, archivos agrupar ‘baz’:218} por key sum() {‘foo’:1, <arch2.parte1> mapper ‘bar’:0, ‘baz’:99} {‘baz’:[19,42,99,65]} count() Reducer sum() {‘foo’:55, <arch2.parte2> mapper ‘bar’:43, ‘baz’:65} count()domingo 4 de noviembre de 2012
  14. 14. 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
  15. 15. 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 mapperdomingo 4 de noviembre de 2012
  16. 16. Amazon Web Services • Crear servidores virtuales dinamicamente. • Pagas solo por las horas que usas • Podes ‘apagar’ y ‘prender’ maquinas en cualquier momentodomingo 4 de noviembre de 2012
  17. 17. AWS: Servicios clave • EC2: Servidores virtuales • S3: Servicio de data-storage • EMR: Hadoop on demanddomingo 4 de noviembre de 2012
  18. 18. 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 dinamicamentedomingo 4 de noviembre de 2012
  19. 19. 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 TASKdomingo 4 de noviembre de 2012
  20. 20. domingo 4 de noviembre de 2012
  21. 21. domingo 4 de noviembre de 2012
  22. 22. domingo 4 de noviembre de 2012
  23. 23. domingo 4 de noviembre de 2012
  24. 24. domingo 4 de noviembre de 2012
  25. 25. domingo 4 de noviembre de 2012
  26. 26. 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 0domingo 4 de noviembre de 2012
  27. 27. 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
  28. 28. Access log - crear tabla CREATE 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 TEXTFILE LOCATION s3n://somebucket/acceslog_dir/;domingo 4 de noviembre de 2012
  29. 29. Ejemplo con CSV CREATE 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 TEXTFILE LOCATION s3n://somebucket/page_views;domingo 4 de noviembre de 2012
  30. 30. Queries # Conteo de hits x url para Nov 2012 SELECT count(*) as count, uri FROM access_log WHERE year = 2012 and month = 11 GROUP 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 s3 INSERT OVERWRITE DIRECTORY ‘s3n://somebucket/somedir’ SELECT * FROM access_log where uri = ‘http://example.com’domingo 4 de noviembre de 2012
  31. 31. 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 adictivodomingo 4 de noviembre de 2012
  32. 32. 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
  33. 33. 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
  34. 34. 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
  35. 35. 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
  36. 36. Preguntas? • @ezegolub • ezequiel.golub@gmail.comdomingo 4 de noviembre de 2012

×