SlideShare una empresa de Scribd logo
1 de 50
Descargar para leer sin conexión
Hadoop y Mapreduce
                  (y otras yerbas)
                   Cómo analizar petabytes de datos y no
                           morir en el intento




domingo 6 de noviembre de 2011
Quién soy yo?

                 • Ezequiel Golub
                 • Desarrollador en Smowtion
                 • Antes en wixi.com
                 • Hace 3 meses implementamos Hadoop
                         y estamos contentos!



domingo 6 de noviembre de 2011
Primero lo primero




domingo 6 de noviembre de 2011
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 6 de noviembre de 2011
Historia
                 • Inspirado por los papers de Google
                         Mapreduce y bigtable del 2004
                 • Creado por Doug Cutting para ser
                         usado por Nutch, un buscador de
                         codigo libre
                 • BTW, Doug Cutting invento Lucene
                 • Hadoop era el elefante de juguete de su
                         hijo

domingo 6 de noviembre de 2011
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 6 de noviembre de 2011
Por qué Hadoop?
                 • Escalabilidad horizontal
                 • Confiabilidad
                 • Apoyo de comunidad
                 • Map/Reduce
                 • Orientado a procesos batch para datos
                         “grandes”

                 • AWS

domingo 6 de noviembre de 2011
Qué no es Hadoop?


                 • Una base de datos relacional
                 • Un sistema de almacenamiento de
                         datos estructurado

                 • Online (Con excepciones!)



domingo 6 de noviembre de 2011
Quienes lo usan?
domingo 6 de noviembre de 2011
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 6 de noviembre de 2011
Donde se usa?
                 • Log File & Web Analytics
                 • Ad Targeting
                 • Scientific Applications
                 • Financial Analysis
                 • Search
                 • Natural Language Processing
                 • Image processing
                 • Data warehousing

domingo 6 de noviembre de 2011
Componentes



domingo 6 de noviembre de 2011
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 6 de noviembre de 2011
HDFS
                 • Integridad y compresión soportadas
                         nativamente

                 • N copias de cada bloque del archivo
                         distribuidas

                 • 1 namenode para N datanodes
                 • Location aware
                 • Interfaz tipo linux (mv, cp, rm, ls, etc)

domingo 6 de noviembre de 2011
Ventajas

                 • Tolerancia a los fallos
                 • Autoregenerativo
                 • Escalable
                 • Confiabilidad
                 • Soporte


domingo 6 de noviembre de 2011
HDFS
                                                     • Mantiene metadata
                                                     • Ubicación de
                                                         bloques
        Backupnode                 Namenode
                                                     • No tiene los datos!
                                                     • SPOF


     Datanode                    Datanode     Datanode


                                                           • Contiene los
                                                             datos
                                                           • No tiene
                                                             metadata

                                                           • Sirve los datos a
                                                             los clientes
domingo 6 de noviembre de 2011
Leer
                                 Ubicación de los
        Cliente                  bloques, metada
                                                    Namenode        Backupnode
        HDFS

                 Transferencia
                   de datos




   Datanode                             Datanode         Datanode     Datanode




domingo 6 de noviembre de 2011
Escribir
                                           {node1,node2,
                                 Cliente      node3}
     foo.bar                     HDFS
                                              Namenode                Backupnode

                 Transferencia
                   de datos




   Datanode                          Datanode              Datanode     Datanode




domingo 6 de noviembre de 2011
Escribir
                                           {node1,node2,
                                 Cliente      node4}
     foo.bar                     HDFS
                                              Namenode                Backupnode

                 Transferencia
                   de datos




   Datanode                          Datanode              Datanode     Datanode




domingo 6 de noviembre de 2011
Escribir
                                           {node2,node3,
                                 Cliente      node4}
     foo.bar                     HDFS
                                              Namenode                Backupnode

                 Transferencia
                   de datos




   Datanode                          Datanode              Datanode     Datanode




domingo 6 de noviembre de 2011
Escribir
                                           {node1,node3,
                                 Cliente      node4}
     foo.bar                     HDFS
                                              Namenode                Backupnode

                 Transferencia
                   de datos




   Datanode                          Datanode              Datanode     Datanode




domingo 6 de noviembre de 2011
Fault tolerance
                                        Namenode        Backupnode


                                                   El namenode detecta un
                                                       datanode caido



   Datanode                       Datanode   Datanode       Datanode




domingo 6 de noviembre de 2011
Fault tolerance
                                              Namenode                     Backupnode


                      El namenode releva los bloques perdidos y los recupera de
                          los nodos sanos, manteniendo el nivel de replicacion



   Datanode                        Datanode               Datanode




domingo 6 de noviembre de 2011
Fault tolerance
                                              Namenode                     Backupnode


                      El namenode releva los bloques perdidos y los recupera de
                          los nodos sanos, manteniendo el nivel de replicacion



   Datanode                        Datanode               Datanode




domingo 6 de noviembre de 2011
Fault tolerance
                                              Namenode                     Backupnode


                      El namenode releva los bloques perdidos y los recupera de
                          los nodos sanos, manteniendo el nivel de replicacion



   Datanode                        Datanode               Datanode




domingo 6 de noviembre de 2011
Escalamiento horizontal
                dinamico y rebalanceo
                                       Namenode        Backupnode


                                                       Se agrega un nuevo
                                                       datanode al cluster


   Datanode                      Datanode   Datanode      Datanode




domingo 6 de noviembre de 2011
Escalamiento horizontal
                dinamico y rebalanceo
                                                     Namenode                       Backupnode


                                    El namenode rebalancea el nuevo cluster,
                                 removiendo las copias extras que no se necesitan



   Datanode                               Datanode               Datanode             Datanode




domingo 6 de noviembre de 2011
Escalamiento horizontal
                dinamico y rebalanceo
                                                     Namenode                       Backupnode


                                    El namenode rebalancea el nuevo cluster,
                                 removiendo las copias extras que no se necesitan



   Datanode                               Datanode               Datanode             Datanode




domingo 6 de noviembre de 2011
Escalamiento horizontal
                dinamico y rebalanceo
                                                     Namenode                       Backupnode


                                    El namenode rebalancea el nuevo cluster,
                                 removiendo las copias extras que no se necesitan



   Datanode                               Datanode               Datanode             Datanode




domingo 6 de noviembre de 2011
Escalamiento horizontal
                dinamico y rebalanceo
                                                     Namenode                       Backupnode


                                    El namenode rebalancea el nuevo cluster,
                                 removiendo las copias extras que no se necesitan



   Datanode                               Datanode               Datanode             Datanode




domingo 6 de noviembre de 2011
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 6 de noviembre de 2011
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 6 de noviembre de 2011
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    1
domingo 6 de noviembre de 2011
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 6 de noviembre de 2011
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 6 de noviembre de 2011
Esquema conceptual
                            Cliente M/R
                             Cliente M/R             Jobtracker
                              Cliente M/R




 TaskTracker                     TaskTracker   TaskTracker TaskTracker




                                 Datos temporales en HDFS
domingo 6 de noviembre de 2011
Fase inicial
                                                           Envia jobs
                            Cliente M/R
                             Cliente M/R                                    Jobtracker
                              Cliente M/R

                                                   Los maps() son asignados a los TaskTracker
    Cada mapper es                                (teniendo en cuenta la localidad de la data)
    ejecutado en una
          JVM


 TaskTracker                            TaskTracker            TaskTracker TaskTracker
              mapper                           mapper                   mapper                mapper



                                 Lee los archivos de input y graba los archivos intermedios

                                        Datos temporales en HDFS
domingo 6 de noviembre de 2011
Fase reduce
                                                       Envia jobs
                                                      Envia “jobs”
                            Cliente M/R
                             Cliente M/R                                  Jobtracker
                              Cliente M/R


                                                         Comienza la fase de Reduce




 TaskTracker                        TaskTracker            TaskTracker TaskTracker
              reducer                      reducer                   reducer           reducer



                                 Lee los archivos temporales y graba los resultados

                                     Datos temporales en HDFS
domingo 6 de noviembre de 2011
M/R: Implementación
                 • M/R es excelente para los problemas
                         donde los ‘sub-problemas’ no son
                         interdepientes

                 • 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 6 de noviembre de 2011
HBASE
                 • Key/Value store montado sobre HDFS
                 • Rapido (Finalmente!)
                 • Soporta range scan de keys
                 • Soporta nocion de tablas, pero usando
                         column families para agrupar
                         columnas

                 • Soporta M/R sobre las tablas

domingo 6 de noviembre de 2011
HBASE no es
                 • Un reemplazo de un RDBMS
                 • Un reemplazo de un datawarehouse
                 • No Joins, no query engine, no datatypes, no sql
                 • No acid
                 • No Schema
                 • No es excelente para guardar datos pequeños
                 • No es excelente para almacenar grandes datos
                         binarios


domingo 6 de noviembre de 2011
HBASE es
                 • Excelente para escrituras rapidas/streaming
                 • Tolerante a fallos
                 • Buena escalando horizontalmente de manera lineal
                 • Eficiente manejando billones de filas y millones de
                         columnas

                 • Buena manteniendo la historia de una fila
                 • Autobalance
                 • Excelente para data no normalizada
                 • Un complemento excelente entre la RDBMS y el
                         Datawarehouse (Hadoop)



domingo 6 de noviembre de 2011
HBASE
                 • Escrito en Java
                 • Almacenamiento orientado a columnas =
                         schemas flexibles

                        • Se puede alterar el schema simplemente
                                 agregando el nombre de la columna.
                        • No hay migraciones de schema!
                 • Cada columna tiene un timestamp asociado
                        • La misma columna con el timestamp más
                                 reciente gana


domingo 6 de noviembre de 2011
Hive
                 • Simula datos estructurados usando
                         archivos en HDFS

                 • HiveQL: Query language similar a SQL
                 • Traduce HiveQL a Map/Reduce
                 • O sea: No es realtime, no reemplaza
                         RDBMS

                 • Auto-particionado

domingo 6 de noviembre de 2011
Ejemplo de Hive
        hive> select key, count(1) from kv1 where key > 100 group by
        key;

        vs.

        $ cat > /tmp/reducer.sh
        uniq -c | awk '{print $2"t"$1}‘

        $ cat > /tmp/map.sh
        awk -F '001' '{if($1 > 100) print $1}‘

        $ bin/hadoop jar contrib/hadoop-0.19.2-dev-streaming.jar -
        input /user/hive/warehouse/kv1 -mapper map.sh -file /tmp/
        reducer.sh -file /tmp/map.sh -reducer reducer.sh -output /tmp/
        largekey -numReduceTasks 1

        $ bin/hadoop dfs –cat /tmp/largekey/part*




domingo 6 de noviembre de 2011
Otros componentes
                                            Libreria para
                                            implementar machine
                                            learning sobre hadoop
                                  Zookeeper: Servicio que mantiene
                                  un K-V store consistente usando N
                                  nodos. Se usa para coordinar
                                  servicios distribuidos

                                  HUE: Hadoop User Experience.
                                  Una linda WEB-UI sobre Hadoop.


domingo 6 de noviembre de 2011
En Smowtion?
                 • 250.000.000 de hits x dia
                 • Solucion con PHP + MySQL =
                 • Lo reemplazamos por algo asi:




domingo 6 de noviembre de 2011
Cómo seguir?

                 • Cloudera.com
                 • Cloudera.com
                 • Hadoop.apache.org
                 • IRC: #hadoop en freenode.org
                 • http://developer.yahoo.com/hadoop/
                         tutorial/


domingo 6 de noviembre de 2011
Gracias!




                 • Twitter: @ezegolub
                 • egolub@smowtion.com
                 • http://www.linkedin.com/in/ezegolub

domingo 6 de noviembre de 2011
Trabajá en Smowtion

                 • Estamos buscando perfiles tecnicos
                         (Developers/SysAdmins)
                 • Nos gustan los problemas dificiles
                 • Nos gustan las tecnologias nuevas
                 • Buen ambiente de trabajo y todo eso
                 • jobs@smowtion.com

domingo 6 de noviembre de 2011

Más contenido relacionado

Similar a Hadoop barcamp 2011

Como de grandes son tus datos
Como de grandes son tus datosComo de grandes son tus datos
Como de grandes son tus datos
Antonio Rodriguez
 

Similar a Hadoop barcamp 2011 (20)

Panorama BigData (OpenExpo2017)
Panorama BigData (OpenExpo2017)Panorama BigData (OpenExpo2017)
Panorama BigData (OpenExpo2017)
 
SolidQ Business Analytics Day | Como de grandes son tus datos
SolidQ Business Analytics Day | Como de grandes son tus datosSolidQ Business Analytics Day | Como de grandes son tus datos
SolidQ Business Analytics Day | Como de grandes son tus datos
 
Como de grandes son tus datos
Como de grandes son tus datosComo de grandes son tus datos
Como de grandes son tus datos
 
Polybase
PolybasePolybase
Polybase
 
01 Introduccion a Big Data y Hadoop.pdf
01 Introduccion a Big Data y Hadoop.pdf01 Introduccion a Big Data y Hadoop.pdf
01 Introduccion a Big Data y Hadoop.pdf
 
Creating Productive Workshops in Scary Situations
Creating Productive Workshops in Scary SituationsCreating Productive Workshops in Scary Situations
Creating Productive Workshops in Scary Situations
 
Emr hive barcamp 2012
Emr hive   barcamp 2012Emr hive   barcamp 2012
Emr hive barcamp 2012
 
Azure Data Usando HDInsight Ejemplo Hadoop: MadReduce, HIVE, PIG
Azure Data Usando HDInsight Ejemplo Hadoop: MadReduce, HIVE, PIGAzure Data Usando HDInsight Ejemplo Hadoop: MadReduce, HIVE, PIG
Azure Data Usando HDInsight Ejemplo Hadoop: MadReduce, HIVE, PIG
 
¿Por que cambiar de Apache Hadoop a Apache Spark?
¿Por que cambiar de Apache Hadoop a Apache Spark?¿Por que cambiar de Apache Hadoop a Apache Spark?
¿Por que cambiar de Apache Hadoop a Apache Spark?
 
Hadoop en accion
Hadoop en accionHadoop en accion
Hadoop en accion
 
Clase Hadoop
Clase HadoopClase Hadoop
Clase Hadoop
 
Bases de datos NoSQL orientadas a documentos
Bases de datos NoSQL orientadas a documentosBases de datos NoSQL orientadas a documentos
Bases de datos NoSQL orientadas a documentos
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
Introducción a Big Data. HDInsight - Webcast Technet SolidQ
Introducción a Big Data. HDInsight - Webcast Technet SolidQIntroducción a Big Data. HDInsight - Webcast Technet SolidQ
Introducción a Big Data. HDInsight - Webcast Technet SolidQ
 
Hadoop en accion
Hadoop en accionHadoop en accion
Hadoop en accion
 
Act4 bd teo
Act4 bd teoAct4 bd teo
Act4 bd teo
 
Whitepaper – Qué es y cómo utilizar Hadoop
Whitepaper – Qué es y cómo utilizar HadoopWhitepaper – Qué es y cómo utilizar Hadoop
Whitepaper – Qué es y cómo utilizar Hadoop
 
An evening with... Apache hadoop Meetup
An evening with...  Apache hadoop MeetupAn evening with...  Apache hadoop Meetup
An evening with... Apache hadoop Meetup
 
Webinar Oracle GoldenGate
Webinar Oracle GoldenGate Webinar Oracle GoldenGate
Webinar Oracle GoldenGate
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidos
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (15)

Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Hadoop barcamp 2011

  • 1. Hadoop y Mapreduce (y otras yerbas) Cómo analizar petabytes de datos y no morir en el intento domingo 6 de noviembre de 2011
  • 2. Quién soy yo? • Ezequiel Golub • Desarrollador en Smowtion • Antes en wixi.com • Hace 3 meses implementamos Hadoop y estamos contentos! domingo 6 de noviembre de 2011
  • 3. Primero lo primero domingo 6 de noviembre de 2011
  • 4. 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 6 de noviembre de 2011
  • 5. Historia • Inspirado por los papers de Google Mapreduce y bigtable del 2004 • Creado por Doug Cutting para ser usado por Nutch, un buscador de codigo libre • BTW, Doug Cutting invento Lucene • Hadoop era el elefante de juguete de su hijo domingo 6 de noviembre de 2011
  • 6. 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 6 de noviembre de 2011
  • 7. Por qué Hadoop? • Escalabilidad horizontal • Confiabilidad • Apoyo de comunidad • Map/Reduce • Orientado a procesos batch para datos “grandes” • AWS domingo 6 de noviembre de 2011
  • 8. Qué no es Hadoop? • Una base de datos relacional • Un sistema de almacenamiento de datos estructurado • Online (Con excepciones!) domingo 6 de noviembre de 2011
  • 9. Quienes lo usan? domingo 6 de noviembre de 2011
  • 10. 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 6 de noviembre de 2011
  • 11. Donde se usa? • Log File & Web Analytics • Ad Targeting • Scientific Applications • Financial Analysis • Search • Natural Language Processing • Image processing • Data warehousing domingo 6 de noviembre de 2011
  • 12. Componentes domingo 6 de noviembre de 2011
  • 13. 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 6 de noviembre de 2011
  • 14. HDFS • Integridad y compresión soportadas nativamente • N copias de cada bloque del archivo distribuidas • 1 namenode para N datanodes • Location aware • Interfaz tipo linux (mv, cp, rm, ls, etc) domingo 6 de noviembre de 2011
  • 15. Ventajas • Tolerancia a los fallos • Autoregenerativo • Escalable • Confiabilidad • Soporte domingo 6 de noviembre de 2011
  • 16. HDFS • Mantiene metadata • Ubicación de bloques Backupnode Namenode • No tiene los datos! • SPOF Datanode Datanode Datanode • Contiene los datos • No tiene metadata • Sirve los datos a los clientes domingo 6 de noviembre de 2011
  • 17. Leer Ubicación de los Cliente bloques, metada Namenode Backupnode HDFS Transferencia de datos Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 18. Escribir {node1,node2, Cliente node3} foo.bar HDFS Namenode Backupnode Transferencia de datos Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 19. Escribir {node1,node2, Cliente node4} foo.bar HDFS Namenode Backupnode Transferencia de datos Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 20. Escribir {node2,node3, Cliente node4} foo.bar HDFS Namenode Backupnode Transferencia de datos Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 21. Escribir {node1,node3, Cliente node4} foo.bar HDFS Namenode Backupnode Transferencia de datos Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 22. Fault tolerance Namenode Backupnode El namenode detecta un datanode caido Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 23. Fault tolerance Namenode Backupnode El namenode releva los bloques perdidos y los recupera de los nodos sanos, manteniendo el nivel de replicacion Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 24. Fault tolerance Namenode Backupnode El namenode releva los bloques perdidos y los recupera de los nodos sanos, manteniendo el nivel de replicacion Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 25. Fault tolerance Namenode Backupnode El namenode releva los bloques perdidos y los recupera de los nodos sanos, manteniendo el nivel de replicacion Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 26. Escalamiento horizontal dinamico y rebalanceo Namenode Backupnode Se agrega un nuevo datanode al cluster Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 27. Escalamiento horizontal dinamico y rebalanceo Namenode Backupnode El namenode rebalancea el nuevo cluster, removiendo las copias extras que no se necesitan Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 28. Escalamiento horizontal dinamico y rebalanceo Namenode Backupnode El namenode rebalancea el nuevo cluster, removiendo las copias extras que no se necesitan Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 29. Escalamiento horizontal dinamico y rebalanceo Namenode Backupnode El namenode rebalancea el nuevo cluster, removiendo las copias extras que no se necesitan Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 30. Escalamiento horizontal dinamico y rebalanceo Namenode Backupnode El namenode rebalancea el nuevo cluster, removiendo las copias extras que no se necesitan Datanode Datanode Datanode Datanode domingo 6 de noviembre de 2011
  • 31. 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 6 de noviembre de 2011
  • 32. 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 6 de noviembre de 2011
  • 33. 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 1 domingo 6 de noviembre de 2011
  • 34. 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 6 de noviembre de 2011
  • 35. 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 6 de noviembre de 2011
  • 36. Esquema conceptual Cliente M/R Cliente M/R Jobtracker Cliente M/R TaskTracker TaskTracker TaskTracker TaskTracker Datos temporales en HDFS domingo 6 de noviembre de 2011
  • 37. Fase inicial Envia jobs Cliente M/R Cliente M/R Jobtracker Cliente M/R Los maps() son asignados a los TaskTracker Cada mapper es (teniendo en cuenta la localidad de la data) ejecutado en una JVM TaskTracker TaskTracker TaskTracker TaskTracker mapper mapper mapper mapper Lee los archivos de input y graba los archivos intermedios Datos temporales en HDFS domingo 6 de noviembre de 2011
  • 38. Fase reduce Envia jobs Envia “jobs” Cliente M/R Cliente M/R Jobtracker Cliente M/R Comienza la fase de Reduce TaskTracker TaskTracker TaskTracker TaskTracker reducer reducer reducer reducer Lee los archivos temporales y graba los resultados Datos temporales en HDFS domingo 6 de noviembre de 2011
  • 39. M/R: Implementación • M/R es excelente para los problemas donde los ‘sub-problemas’ no son interdepientes • 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 6 de noviembre de 2011
  • 40. HBASE • Key/Value store montado sobre HDFS • Rapido (Finalmente!) • Soporta range scan de keys • Soporta nocion de tablas, pero usando column families para agrupar columnas • Soporta M/R sobre las tablas domingo 6 de noviembre de 2011
  • 41. HBASE no es • Un reemplazo de un RDBMS • Un reemplazo de un datawarehouse • No Joins, no query engine, no datatypes, no sql • No acid • No Schema • No es excelente para guardar datos pequeños • No es excelente para almacenar grandes datos binarios domingo 6 de noviembre de 2011
  • 42. HBASE es • Excelente para escrituras rapidas/streaming • Tolerante a fallos • Buena escalando horizontalmente de manera lineal • Eficiente manejando billones de filas y millones de columnas • Buena manteniendo la historia de una fila • Autobalance • Excelente para data no normalizada • Un complemento excelente entre la RDBMS y el Datawarehouse (Hadoop) domingo 6 de noviembre de 2011
  • 43. HBASE • Escrito en Java • Almacenamiento orientado a columnas = schemas flexibles • Se puede alterar el schema simplemente agregando el nombre de la columna. • No hay migraciones de schema! • Cada columna tiene un timestamp asociado • La misma columna con el timestamp más reciente gana domingo 6 de noviembre de 2011
  • 44. Hive • Simula datos estructurados usando archivos en HDFS • HiveQL: Query language similar a SQL • Traduce HiveQL a Map/Reduce • O sea: No es realtime, no reemplaza RDBMS • Auto-particionado domingo 6 de noviembre de 2011
  • 45. Ejemplo de Hive hive> select key, count(1) from kv1 where key > 100 group by key; vs. $ cat > /tmp/reducer.sh uniq -c | awk '{print $2"t"$1}‘ $ cat > /tmp/map.sh awk -F '001' '{if($1 > 100) print $1}‘ $ bin/hadoop jar contrib/hadoop-0.19.2-dev-streaming.jar - input /user/hive/warehouse/kv1 -mapper map.sh -file /tmp/ reducer.sh -file /tmp/map.sh -reducer reducer.sh -output /tmp/ largekey -numReduceTasks 1 $ bin/hadoop dfs –cat /tmp/largekey/part* domingo 6 de noviembre de 2011
  • 46. Otros componentes Libreria para implementar machine learning sobre hadoop Zookeeper: Servicio que mantiene un K-V store consistente usando N nodos. Se usa para coordinar servicios distribuidos HUE: Hadoop User Experience. Una linda WEB-UI sobre Hadoop. domingo 6 de noviembre de 2011
  • 47. En Smowtion? • 250.000.000 de hits x dia • Solucion con PHP + MySQL = • Lo reemplazamos por algo asi: domingo 6 de noviembre de 2011
  • 48. Cómo seguir? • Cloudera.com • Cloudera.com • Hadoop.apache.org • IRC: #hadoop en freenode.org • http://developer.yahoo.com/hadoop/ tutorial/ domingo 6 de noviembre de 2011
  • 49. Gracias! • Twitter: @ezegolub • egolub@smowtion.com • http://www.linkedin.com/in/ezegolub domingo 6 de noviembre de 2011
  • 50. Trabajá en Smowtion • Estamos buscando perfiles tecnicos (Developers/SysAdmins) • Nos gustan los problemas dificiles • Nos gustan las tecnologias nuevas • Buen ambiente de trabajo y todo eso • jobs@smowtion.com domingo 6 de noviembre de 2011