Recientemente desarrollé una aplicación interactiva de Hadoop para optimizar HBase, que es algo inspirado en Hannibal en lo que respecta a la interfaz de usuario, pero con mejoras de la interfaz de usuario y que también permite realizar una optimización inteligente del clúster siguiendo varios algoritmos. Por cierto, Hannibal fue codificado usando The Play Framework que puede dar algunas ideas a su pregunta:
sentric / hannibal
Así que yo mismo tuve que responder a esta pregunta y le daré lo que he hecho o lo que haría en función de mis investigaciones y experiencia.
- Quiero regalar un teléfono a mi hermano menor, que es un completo geek y programador, entonces, ¿qué teléfono inteligente debo considerar comprar cuando tengo un presupuesto de hasta Rs? 25000?
- Estoy sobrecalificado y subcalificado, ¿qué hago?
- ¿Qué quieres hacer con drones?
- ¿Por qué me siento más cómodo usando Quora en mi teléfono que en mi computadora portátil?
- Estoy buscando comprar un teclado con una sola mano para descansar sobre la muñeca o investigar para hacer uno. ¿Alguien sabe si hay prioridad para esto (que no utiliza el orden de las teclas QWERTY, me imagino que el orden de las teclas no es casi eficiente para la operación con una sola mano), o existe uno?
En primer lugar, supondré que estás hablando de una GUI para usuarios normales y no de una línea de comando para personas geek. Entonces, la opción de hoy aquí es crear una interfaz basada en la web y ni siquiera consideraría una aplicación de escritorio a menos que tenga buenas razones para ello. Esta es la opción más común y así es como se construyen todas las demás GUI en el ecosistema de Hadoop, por lo que parece ser una opción segura.
Le recomiendo utilizar un marco web que garantice la calidad de su arquitectura. Básicamente, tiene tres posibilidades en términos de marco para hacer una GUI basada en la web (de hecho, existen muchas más, pero doy aquí las más populares y de mayor confianza):
- Django (Python)
- Ruby on Rails (Rubí)
- El marco de juego (Java o Scala)
Revisé un cierto número de puntos de referencia y artículos, y siempre estos tres marcos se estaban logrando por delante de cualquier otro, así que no consideraría personalmente otro a menos que ya tenga una gran habilidad en otra tecnología. En caso de que esté aprendiendo o esté dispuesto a aprender, le aconsejaría que elija uno de estos marcos que también se puede reutilizar en muchos otros proyectos.
Entonces, ¿cuál elegir entre esos? Personalmente quería elegir The Play Framework para mi propio proyecto. Creo que esto es muy adecuado para desarrollar una interfaz para el ecosistema de Hadoop porque también está en Java y tanto Front como Back End se pueden escribir en Java simple (o Scala si te sientes cómodo con este lenguaje). El marco está diseñado de manera inteligente y tiene buenas críticas en su mayoría. Aún así, en mi caso, esto no fue posible porque estoy ejecutando una pequeña versión antigua de HBase que no es compatible con Java 8 y The Play Framework en la versión reciente solo funciona en Java 8 (al menos me cuesta mucho pero no pude hacerlo) funciona correctamente con Java 7).
Según los puntos de referencia, existe bastante consenso de que Ruby on Rails es el mejor y más elegante marco web. Como no fui por este porque no conozco a Ruby y de alguna manera no estaba dispuesto a aprender. Mi razón es que Ruby podría ser un lenguaje excelente pero no está tan relacionado con el ecosistema Hadoop y Big Data en general, por lo que diría que los idiomas más importantes para dominar en Big Data son Java y Python (tal vez Scala como extra). Por lo tanto, tiene sentido seguir con estos lenguajes cuando desarrollas algo dentro del ecosistema Hadoop.
Ya estaba cómodo en Python, así que finalmente fui a Python y elegí el framework Django. Mi experiencia con este es realmente buena y podría lograr crear una GUI fácilmente sin mucho esfuerzo utilizando también la plantilla HTML SB Admin 2 basada en Bootstrap.
Tengo que explicar también que no me estoy conectando directamente al código Back End de la aplicación Hadoop desde el código Python, sino que estoy usando una API RESTful porque mi Back End está escrito en Java. La conexión directa desde Python a Java podría hacerse usando Jython, pero quería mantener las cosas simples, por lo que esta solución buscaba agregar más complejidad.
Entonces, la pila general de mi aplicación interactiva Hadoop es la siguiente:
- Front End usando Django Framework con el cliente RESTful (Python)
- API RESTful (Jersey con servidor web simple)
- Back End usando la API de HBase (Java)
Esta arquitectura funciona bien en general y estoy satisfecho con ella. También me gustó el concepto de tener una API RESTful entre Back End y Front End que permite programar fácilmente otra GUI para cualquier otro dispositivo (de escritorio o móvil) en cualquier idioma, incluida una GUI de JavaScript completa. En caso de que considere javascript completo, puede usar uno de los marcos famosos como AngularJS, ReactJS o BackboneJS o cualquier otro de moda. De hecho, esta arquitectura desacopla completamente la GUI del Back End que contiene la lógica real de Hadoop. Yo mismo no quería apostar por JS completo porque, en mi opinión, estos marcos JS modernos están cambiando demasiado a un ritmo rápido, por lo que quería algo más estable y confiable a largo plazo. Todavía utilicé dentro del código de la plantilla de Django varias bibliotecas javascript específicas para mejorar la GUI general.
Aún así, en caso de que haya posibilidad de codificación en Java 8 (que es el caso de las versiones más recientes de Hadoop), consideraría The Play Framework. Este tiene buen nombre y se basa también en la API RESTful entre el Front y Back End, que es parte del marco.
Estas son mis propias experiencias, pero luego considero tus propias necesidades, qué tecnología ya dominas y si tienes voluntad (y tiempo) para aprender una tecnología completamente nueva o si quieres seguir con lo que ya sabes.