Big Data: ¿a quién contratar? ¿Dónde trabajar?

Este es uno de los grandes retos a los que nos enfrentamos respecto al Big Data en España. Estamos todavía empezando, hay pocos proyectos, no sabemos muy bien todavía qué es y cómo funciona, pero tenemos que empezar con ello sí o sí. Buscamos una idea –que siempre podemos copiar- o empezamos por algo sencillo, migrando nuestros almacenes de datos a otros más ágiles y baratos.

Compramos la idea de Big Data. ¿Y ahora? Alguien tendrá que mantener esto, ¿no? Nuestro personal tradicional de sistemas no nos sirve. O tenemos a algún friki inquieto que haya trasteado por ahí, o va a ser difícil reciclar a alguien.

¿Qué tenemos que buscar? Recruiters:

HH Big Data

Tanto los Head Hunters, como los departamentos de RRHH e incluso los directores de IT, no tienen claro qué buscar. Mirando en webs de recruiting, encontramos peticiones de lo más variopintas, desde unas que piden “expertos en Big Data con certificación” (así, sin más), como otras que buscan “expertos en Big Data con conocimientos en SAS” y una tercera que (por pedir, que no quede), piden expertos en absolutamente todas las tecnologías de Big Data. ¡Más vale que sobre que no que falte! Claro, las búsquedas resultan sumamente infructuosas.

Como decía Tamara Dull (Directora de tecnologías emergentes de SAS Best Practices) en el SAS Forum España 2015, Hadoop ha llegado en 2011. Con lo cual, si queremos cinco años de experiencia en Hadoop, habrá que esperar al menos al año que viene y, si además queremos que ese expertise sea en proyectos reales, habrá que esperar al menos dos o tres años más, aunque reitero que existen compañías en España trabajando en proyectos reales de Big Data, tanto grandes, como pequeñas. Y algunas muy buenas por cierto.

¿Qué hacemos entonces? Algunas recomendaciones:

Quizá sea mejor alguien con mucho interés y capacidad, que alguien con mucha experiencia. Estos recursos tienen necesidades diferentes. Deben participar en foros, formarse continuamente, estar al tanto de lo que ocurre. No les basta solo salario y puesto.

Big Data es un trabajo en equipo.

Obviamente, no existe un solo perfil que cubra todo. A nadie se le ocurriría implantar un ERP con un solo perfil, incluyendo el dimensionamiento de las máquinas, la administración de la base de datos y la toma de requerimientos con los usuarios finales. Dependiendo del tipo de proyecto que vayamos a abordar, o de lo que se quiera hacer, inicialmente hay tres perfiles claramente diferenciados, que a continuación describo de la forma más sencilla posible:IMG_7077

  1. Big Data Developer: coge los datos, los almacena, los procesa, se asegura de que todo funcione bien y los deja disponibles para que otros los puedan utilizar. Se encarga también de pasar los datos de un sitio a otro. Suelen ser ingenieros, informáticos o matemáticos (los matemáticos sirven para todo), con conocimientos en Hadoop y su ecosistema, y en Spark.
  2. Data Scientist: analiza los datos en profundidad. Los limpia, agrega y saca conclusiones a partir de ellos. Tiene que tener sólidos conocimientos en estadística, herramientas (R, SAS), y también en el ecosistema Hadoop. No solo analiza los datos, sino que es capaz de interpretarlos y ponerlos a disposición de usuarios o quien los vaya a utilizar después.
  3. Big Data Administrator: como siempre, alguien debe revisar que toda la “cacharrería” funcione correctamente. Balancear cargas, distribuir tareas por los nodos, optimizar consultas, etc. Perfil técnico con conocimiento e interés en la infraestructura. Por supuesto, conocimientos de Hadoop.

Ahora vamos con la otra parte: los candidatos.

Por lo general, suelen ser gente “friki” (con todo el cariño y en tono nada despectivo; de hecho, si no fueran frikis, posiblemente no se dedicarían a esto). Son personas inquietas y con ganas de hacer cosas, y a los que les espera un buen futuro en los próximos cinco-diez años.

Como en todos los trabajos, la actitud, la responsabilidad y el trabajo en equipo son fundamentales.

Seas friki o no, y trabajes en la compañía que sea, aquí radica según mi experiencia el 90% del éxito de lo que se haga.

Y dicho esto, pasemos a ver qué nos ofrece el mercado, para acertar mejor dónde trabajar. Las personas formadas en Big Data, tienen la suerte de poder elegir en qué empresa quieren trabajar.

Incluyo un desglose de alguno de los tipos de compañías que buscan recursos de Big Data:

  1.  Grandes consultoras: ofrecen buenos sueldos, reputación y carrera profesional valorando positivamente el talento. Son lanzaderas para carreras de éxito. Hay que trabajar mucho, duro y en equipo. Imprescindible hablar inglés (bueno, hoy en día, en cualquier trabajo) y valorable otros idiomas. Incluye viajes al extranjero y posibilidad de una red de expertos internacional a tu alcance. Los planes de carrera y de formación están al orden del día. Suelen hacer proyectos grandes para grandes clientes y, dependiendo de a qué proyecto te asignen, podrás ver unas cosas u otras, seguramente en un ámbito concreto del proyecto.
  2. Consultoras, implantadores medianos / pequeños: ofrecen sueldos más ajustados al mercado que las grandes consultoras y tal vez algo menos de beneficios sociales. Tienen a priori menos posibilidades de carrera profesional -aunque los que destacan seguro que la tendrán- pero a cambio son más ágiles y te permitirán conocer todo o casi todo del proyecto o los proyectos en los que participes. También hay que trabajar mucho, pero estas permiten otro tipo de aprendizajes. Seguramente tendrás que investigar y aprender más por tu cuenta para sacar adelante el trabajo. Desde el becario hasta el director general, suelen estar implicados en el proyecto y disponibles para lo que puedas necesitar. Suelen estar –tecnológicamente hablando- más avanzadas que las grandes consultoras y HH Candidaterequieren expertos de verdad.
  3. Consultoras de nicho: supongo que pagarán algo menos, pero a cambio podrás hacer de todo –participar en propuestas, presentaciones a clientes, foros…-; fomentan mucho más el trabajo en equipo y, casi seguro, tendrás voz y voto en lo que se decida en la compañía. En contra, tienen un futuro que puede ser más incierto que las grandes y medianas, y muy probablemente acaben engullidas por alguna de ellas.
  4. Cliente final: aunque hay algunos clientes finales inmersos en proyectos de Big Data, lo más seguro es que en un cliente final tengas que desarrollar el proyecto desde cero. Posiblemente no tengan mucha idea de cómo llevarlo a cabo, y podrás participar en todas las fases, y adquirir conocimientos sectoriales. Los departamentos de innovación –aunque creo que todavía no buscan perfiles de Big Data- son una excelente oportunidad para aprender y hacer cosas distintas. En contra, (dependiendo del tipo de cliente) no hay mucha variedad de proyectos.
  5. Fabricantes: un buen técnico preventa es un recurso muy valorado. Este trabajo permite conocer distintos clientes y casuísticas, definir estrategias en clientes y, por lo general, no participan en las implantaciones. En contra, hay que decir que suelen vender sólo su plataforma.

Spark para Dummies

sparkSpark, al igual que Hadoop, es básicamente un marco de desarrollo que proporciona una serie de plataformas interconectadas, sistemas y estándares para llevar a cabo proyectos de Big Data.

Spark también es de código abierto y pertenece a la Apache Software Foundation. De código abierto quiere decir que el código puede ser utilizado libremente por cualquier persona; aun más: puede ser modificado por cualquier persona para crear otras versiones dirigidas a resolver nuevas problemáticas. Los desarrolladores y las empresas que las producen, están constantemente refinando y actualizando los programas, añadiendo nuevas funcionalidades o mayor eficiencia. Spark fue el proyecto de Apache más participativo el año pasado, y no sólo de Apache, sino de todas las aplicaciones de código abierto de Big Data, con más de 500 colaboradores en más de 200 organizaciones.

contributors spark

Según los expertos, Spark es más avanzado y más reciente que Hadoop, y está diseñado para trabajar mediante el procesamiento de fragmentos de datos «en memoria«. Esto significa que transfiere los datos de los discos duros físicos a la memoria del sistema, donde el procesamiento es mucho más rápido (hasta 100 veces más rápido en algunas operaciones).

La plataforma Spark está muy de moda, y lo utilizan muchas grandes empresas para el almacenamiento y análisis de enormes cantidades de datos multi-petabytes, debido a su velocidad: el año pasado, Spark alcanzó un récord mundial al completar una prueba de clasificación de 100 terabytes de datos en 23 minutos, cuando el récord anterior era de 71 minutos con Hadoop. Además, es idóneo para aplicaciones de Machine Learning (Aprendizaje Automático), una de las prácticas de mayor crecimiento y más emocionante dentro de las ciencias de la computación (ver post anterior).

Apache Spark está diseñado desde sus inicios para ser fácil de instalar y usar – siempre que se tengan ciertos conocimientos de informática- y para ser utilizado en múltiples aplicaciones de negocio. Muchos proveedores ofrecen sus propias versiones (al igual que  Hadoop), orientados a industrias concretas, configuraciones customizadas para proyectos y usos concretos, y servicios de consultoría para su implantación y funcionamiento .

Spark utiliza la computación en clúster (grupos de máquinas unidas por una red de alta capacidad, que funcionan como una gran máquina) para obtener una mayor potencia de cálculo y almacenamiento, lo cual se traduce en que puede utilizar los recursos de muchos procesadores unidos entre sí. Es una solución escalable, es decir, que si se necesita más capacidad, sólo se tienen que añadir más procesadores en el sistema. Con el almacenamiento distribuido, los grandes ficheros de datos recogidos para el análisis se almacenan en muchos discos duros físicos individuales más pequeños, lo cual acelera las operaciones de lectura/escritura, porque la «cabeza» que lee la información de los discos tiene menos distancia física para desplazarse sobre la superficie del disco. Al igual que con la potencia de procesamiento, se puede añadir más capacidad de almacenamiento cuando sea necesario y, además, utiliza hardware comercial (discos duros estándar) que mantiene bajos los costes de infraestructura.

cluster
A diferencia de Hadoop, Spark no viene con su propio sistema de archivos: en vez de eso, se puede integrar con muchos sistemas de archivos incluyendo el de Hadoop HDFS, MongoDB y el sistema S3 de Amazon. Otro elemento diferencial es Spark Streaming, que permite que las aplicaciones que se desarrollen realicen análisis en streaming, datos en tiempo real, redes sociales, ficheros de log, etc. En las industrias como el marketing, el análisis en tiempo real proporciona grandes ventajas; por ejemplo, personalizar los anuncios en base al comportamiento real del usuario, en lugar de en el comportamiento histórico, aumentando la posibilidad de obtener una compra.

Una breve introducción de Apache Spark, el futuro del Big Data, que espero que resulte útil.

Hadoop for dummies

hadoopHadoop es, hoy por hoy, el marco de desarrollo establecido para implantaciones de Big Data. Se compone de un conjunto de capacidades reales, escalables y automáticas para gestionar el flujo de datos, y convertir raw data (datos en bruto) en insight (valor).

Su creador fue Doug Cutting y lo donó a Apache Software Foundation (organización sin ánimo de lucro creada para dar soporte a los desarrollos de Software). Su nombre y el logo, se lo debe a la mascota de su hijo, un elefante de peluche llamado Hadoop.

Surge en 2004 a partir de un White Paper de Google que describía su sistema de ficheros. Doug no tuvo problema en implantarlo y mejorarlo.

Como ya hemos dicho en post anteriores, Hadoop cubre las necesidades básicas que tiene el Big Data: almacenamiento y procesado de datos. De ahí, que esté basado en dos conceptos:

  • HDFS (Hadoop Distributed File System): es un sistema de archivos distribuido, escalable y portátil.
  • MapReduce: es el modelo de programación sencillo para dar soporte a la computación paralela.hdfs

El sistema distribuido de ficheros trabaja sobre grupos de computadoras, organizadas en lo que se llama un cluster, puede incluir desde una máquina (nodo), hasta 30.000 según la web de Apache. Cada máquina puede tener varios discos.

Hadoop funciona en modo cliente-servidor. Existe un nodo máster que se encarga de la gestión del almacenamiento y procesado, es decir, de dónde está cada fichero de datos, de enviar las órdenes de procesado de los datos (Jobs) y de asegurar que todo queda procesado del modo más eficiente posible.

Los grandes ficheros de datos de entrada se trocean en tamaños menores (64GB ó 128GB) y cada trozo se replica al menos tres veces en nodos distintos. Así se comienza el procesamiento en paralelo, y si alguno de los nodos falla, el máster detecta el fallo y asigna el trabajo a otro nodo disponible.

MapReduce trabaja mediante algoritmos simples de “clavevalor” . La parte de Map, asigna la clave a la información que estamos buscando. El ejemplo estrella de los cursos de Hadoop es el algoritmo de contar palabras en un texto. La clave sería cada palabra, y el valor las veces que aparece. Primero contaríamos cada palabra, siendo el resultado (palabra, 1), después ordenaríamos las palabras y finalmente, en la fase Reduce, sumaríamos las palabras que aparecen repetidas. Veámoslo con un gráfico:

mapreduce

Con este método se ahorra tiempo de transferencia de ficheros, ya que el almacenamiento y el procesado se realiza en el mismo sitio.

Hadoop trabaja en modo batch, es decir, ejecutando unos procesos tras otros. Está optimizado para leer cada fichero entero, desde el principio hasta el final, por ello está destinado a trabajar con pocos ficheros grandes en vez de con muchos pequeños, porque lo carga en memoria y lo lee de una sola vez.

Por suerte, existe todo un ecosistema para trabajar con Hadoop, y no tener que escribir todo el código necesario para realizar la asignación de ficheros, el procesamiento, etc.

Veamos algunos de los componentes del zoo de Hadoop:

eco hadoop

Eclipse: es un entorno de desarrollo integrado, donado por IBM a la comunidad Apache. Agiliza enormemente el desarrollo de los programas Java.

Sqoop: nos permite conectarnos a cualquier base de datos relacional (que el acceso mediante una conexión ODBC) e intercambiar datos con nuestro sistema de ficheros HDFS. Es muy importante poder incorporar fácilmente datos de nuestras bbdd (datawarehouse, ERPs, etc.) igualmente poder llevar fácilmente el resultado de un cálculo (scoring, segmentación…) a nuestras bases de datos.

Flume: nos permite recuperar información de sitios remotos. Mediante un agente que se ejecuta en el lugar que se producen los datos (fichero de log, Tweeter…) recoge los datos y los importa en HDFS. Es solo de una dirección, no permite exportar datos de HDFS a otras ubicaciones. Muy útil para recuperar información en tiempo real.

Hive: actúa como la base de datos de Hadoop. Es un intérprete SQL – MapReduce. Traduce la query a programas Java que realicen los MapReduce. Esto permite utilizar herramientas de Business Intelligence convencionales (que admitan conexión ODBC) con los datos de HDFS.

Pig: para trabajar con MapReduce, es necesario programar, tener sólidos conocimientos de Java, saber cómo funciona MapReduce, conocer el problema a resolver, escribir, probar y mantener el código … Para ello es muy beneficioso disponer de un sistema más sencillo, que nos abstraiga de la complejidad del MapReduce. Para ello existe Pig, que facilita el flujo de datos de una manera más sencilla. Dispone de su propio lenguaje de programación llamado Pig Latin.

Hbase: es una base de datos columnar que se ejecuta sobre HDFS. Puede almacenar grandes cantidades de datos, y acceder a ellos muy rápidamente y lleva bien el procesamiento incluso cuando hay datos dispersos. Un ejemplo de base de datos columnar, es como si almacenáramos los resultados de fútbol en una tabla así:tabla futbol

Oozie: Actúa como un planificador. Es un motor de workflows, que puede incluir procesos MapReduce (varios, ya que los procesos MapReduce son simples y por lo general, hay que encadenar varios para realizar los cálculos), scripts de Pig, de Hive, etc.

Zookeeper: alguien tenía que cuidar de tanta fauna… Zookeeper actúa como coordinador. Guarda toda la configuración de los metadatos, realiza los bloqueos pertinentes si dos procesos deben acceder al mismo fichero, guarda usuarios y passwords para el acceso a los distintos sitos, etc.

Mahout: es una librería de algortimos de Machine Learning, escritos en Java. ¿Qué es Machine Learning? Un programa al que no hay que decirle qué debe hacer. Dedicaremos un post posterior a habla de Machine Learning.

Después de este ecosistema, ya podemos ponernos a utilizar Hadoop, sin necesidad de ser expertos en Java… ¿os animáis?