Cuando se necesita pasar datos desde una base de datos relacional hacia otra, basta con hacer consultas sin preocuparse mucho de la persistencia. Cuando tenemos que operar una gigantesta base de datos relacional, pasando una copia a otra base de datos con el objetivo de analizar rápidamente lo recolectado, tenemos que considerar que esa operación puede tomar horas ¿Qué sucede si la ingesta se realiza diariamente?
Apache Sqoop
Apache Sqoop se creó para realizar transferencias de datos en forma masiva entre base de datos relacionales o un mainframe y Apache Hadoop. Durante el año 2009 nació como un módulo para Hadoop, se desacoplo de Hadoop y ya en el año 2010 se convirtió en un proyecto de Apache. En marzo de 2012 se convirtió en un proyecto de prioridad para Apache Software Foundation (AFS).
¿Qué hace?
La forma en que Sqoop replica la data puede parecer muy simple. Sqoop importa los datos en paralelo usando múltiples mappers donde cada uno colecta una parte de la tabla. Luego esos datos son almacenados en el HDFS y los disponibiliza para ser procesados. La opción de enviar los datos procesados a una base de datos relacional también es soportada.
Ventajas
- Integración con el ecosistema Hadoop
- Las estructuras que forma Sqoop al importar la data se integra fácilmente con sistemas Hadoop como Hive y HBase. Los datos importados quedan en diferentes archivos dentro de Hadoop, facilitando el uso de los datos.
- Los comandos son simples, además de configurables. En caso se necesite hacer algo especial, por ejemplo, un nuevo driver para una base de datos o aplicar un nuevo criterio para separar las consultas sql, entonces se pueden utilizar clases Java.
- Sqoop permite obtener solamente una parte de la data como lo que ha sido agregado después de la última ingesta.
Desventajas
- Es importante considerar que bases de datos muy grandes requieren de una gran cantidad de consultas. Muchos mappers en paralelo pueden sobrecargar a la base de datos.
- Cuando se trabaja con múltiples mappers, es necesario asegurar que tienen la misma carga de trabajo. Es común que la consulta sql que usa un mapper colecte más datos que los otros. Eso se puede solucionar usando una key representativa y que se encuentre bien distribuida dentro de la tabla. Por ejemplo, no es lo mismo trabajar con una base de datos que tiene id’s incrementales que con otra que usa un String como key.
- No es capaz de actualizar los datos existentes. Sin embargo, ese tipo de trabajo se encuentra afuera de la esencia de Hadoop, escribir una vez y leer muchas veces la data.
- Si el proceso de exportar datos hacia una base de datos relacional falla durante su ejecución, no hay posibilidades de rollback. Sqoop hace commit después de una cierta cantidad de datos insertados.
Sqoop es una herramienta open source que permite a los usuarios extraer datos desde una fuente estructurada hacia Hadoop, agilizando esas tareas y soportando a las bases de datos relacionales más utilizadas.