Desarrollo de herramientas empresariales para la búsqueda de información utilizando Biginsights, Java y otras tecnologías de la informática Índice Introducción Capítulo 1: Contexto General 1.1 Descripción del problema 1.2 Descripción del sistema Capítulo 2: Tecnologías involucradas 2.1 IBM Biginsights 2.1.1 Big Data 2.1.2 Hadoop 2.1.2.1 MapReduce 2.1.3 Características de Biginsights 2.2 Java 2.2.1 Servlets y JSP 2.2.2 Frameworks de Java 2.2.2.1 Struts 2.2.2.2 Log4j 2.3 Freemarker IBM Rational Team Concert IBM Websphere Jaql IBM MQ Linux Bash scripting Bases de datos Derby IBM Db2 XML Capítulo 3 : Sistema de Búsqueda Backend Motor de búsqueda Nutch Crawler Frontend Aplicaciones Web Interfaz de Usuario Interfaz de Administración Runtime Aplicación para empujar documentos Servicio de búsqueda empresarial Capítulo 4: Desarrollo e implementación del sistema Capítulo 5: Evaluación y funcionamiento del sistema Capítulo 6 : Conclusiones Introducción Este trabajo presenta bajo la modalidad de titulación por caso de estudio el desarrollo de algunas herramientas de software que dan solución al problema de búsqueda de información interna y externa a una empresa multinacional mediante la implementación de un sistema de búsqueda. Este documento es producto de la experiencia de casi cuatro años como desarrollador y analista de sistemas como parte del equipo encargado del sistema de búsqueda implementando nuevos requerimientos, mejoras, actualizaciones y solucionando problemas de diferentes tipos que se han presentado durante el proyecto al que pertenece esta solución o sistema. Por razones de confidencialidad y seguridad no se mencionará en este trabajo el nombre de la empresa ni se detallará a fondo la arquitectura del sistema implementado. En este documento se hablará sobre las tecnologías involucradas en la implementación del sistema de búsqueda y de cómo interactúan entre sí. El problema de la búsqueda de información se refiere como un usuario puede obtener información, documentos, contenidos multimedia , entre otros, de forma precisa, es decir, que la información encontrada sea de relevancia conforme a lo que el usuario necesita y en un tiempo reducido. Mismo que es solucionado mediante la implementación de un sistema de búsqueda en la página web de la empresa de manera que clientes, estudiantes, investigadores o cualquier usuario interesado en obtener cualquier tipo de información relacionada a la empresa lo pueda hacer de la manera más eficiente posible. Además de satisfacer las necesidades de los usuarios finales mencionados anteriormente, el sistema debe de solucionar las necesidades de los usuarios relacionados con el funcionamiento del sistema, por ejemplo, los usuarios encargados de actualizar contenidos y de administrar cada uno de los componentes del mismo. La resolución de este problema se inscribe en el área de desarrollo de sistemas. Se requiere contar con experiencia en programación en la tecnología Java, ingeniería y arquitectura en software, componentes web, patrones de diseño, entre otras áreas. Estas áreas de conocimiento fueron estudiadas y reforzadas durante el tiempo que cursé la Maestría en Tecnologías de Información principalmente en las materia de Programación avanzada, Matemáticas avanzadas, Sistemas operativos avanzados , Bases de datos Ingeniería de Software I y II y Tópicos selectos de desarrollo de sistemas (Usabilidad) En este trabajo primero se hablará a fondo sobre las diferentes tecnologías involucradas en el desarrollo del sistema de búsqueda, después de los componentes que conforman el sistema y por último un análisis del funcionamiento sistema. También hay un anexo sobre cómo se ejecutaron las pruebas del sistema y de la metodología Agile que se utilizó para las etapas de desarrollo y mantenimiento del sistema. Capítulo 1: Contexto General 1.1 Descripción del problema Una empresa multinacional cuyo giro son las Tecnologías de Información necesita de un sistema de búsqueda el cual permita buscar información de manera eficiente sobre productos, tecnologías desarrolladas y cualquier otro tipo de información relacionada con la empresa. Este debe ser implementado como un buscador web de contenidos, parecido a los sistemas de búsqueda web que implementan Yahoo o Google. Este sistema será parte de la página principal de la empresa. La información o los contenidos provienen de muchos sistemas que pertenecen a diferentes áreas de la compañía, estos sistemas generan diferente tipo de información en diversos tipos de archivos o presentaciones por ejemplo se generan blogs, páginas web, wikis, archivos de texto, archivos multimedia, entre otros. La totalidad de la información disponible es demasiado grande, se estiman más de 10 Terabytes de datos. Por tanto, la problemática general a resolver consiste en cómo desarrollar un sistema de búsqueda web que sea capaz presentar de forma eficaz la información que el usuario necesita. También es necesario que el sistema esté disponible 99.9% del tiempo. Existen muchos otras problemáticas que se originan por la naturaleza de las actividades de la empresa pero que no pueden ser incluidas en este documento por cuestiones de confidencialidad, Problemas como los tipos de accesos a la aplicación, el tipo de infraestructura de hardware empleada, idiomas que soporta el sistema, entre otros están por tanto fuera del alcance del documento. 1.2 Descripción del sistema El sistema de debe ser capaz de manejar grandes volúmenes de datos de una manera rápida y eficiente para dar una respuesta satisfactoria en relevancia, tiempo y en calidad a los usuarios. Este sistema debe contar con las características básicas de un buscador web y debe contar con diferentes módulos para los diferentes tipos de operaciones que se realizan en un buscador. También debe permitir a los usuarios administradores del mismo contar con herramientas para llevar a cabo tareas relacionadas la búsqueda de información, tales como actualización de contenidos, administración de la publicidad en la página, bloqueo de contenidos, generación de reportes, entre otras. Para entender el funcionamiento del sistema de búsqueda que se requiere es necesario entender cómo funciona un motor de búsqueda. Un sistema de búsqueda o motor de búsqueda efectúa al menos dos funciones principales [1]: • Proceso de indexar: Se refiere a construir estructuras de datos que permiten la búsqueda • Proceso de consulta: Se refiere a usar esas estructuras para producir una lista de documentos ordenadas por relevancia dada una consulta de un usuario El proceso de indexar se compone de: • Adquisición de texto • Transformación de texto • Creación de un índice El proceso de adquisición de texto se refiere a identificar y poner a disponibilidad los documentos que podrán ser buscados. Esto se efectúa mediante un “crawler” que se encarga de escanear el repositorio de datos para posteriormente identificar y adquirir los documentos para el motor de búsqueda. Otra de sus funciones es la de describir contenido nuevo en el repositorio e integrarlo al índice. Después se efectúa el proceso de convertir la variedad de formatos de archivos que se encuentran a una estructura de datos que contiene tanto el documento como información relevante sobre él. Estas estructuras de datos son guardadas generalmente en un “Data Document Store” que es una base de datos para este tipo de estructuras. Después la información de esta base de datos se transforma en un índice, que es una representación depurada y reducida de estos datos para facilitar el proceso de consulta. Figura 1. Proceso de Indexar. [1] El proceso de consulta se refiere a las actividades que involucran las consultas que realizan el usuario y los resultados que obtiene del sistema. Este proceso consta de: • Interacción del usuario • Evaluación • Categorización Primero el usuario envía una petición de consulta al sistema, dicha consulta se transforma y pasa por un proceso de evaluación en el cual la consulta se transforma a información significativa para el sistema con el fin de que obtengamos resultados relevantes respecto a la búsqueda. Finalmente todos esos resultados son categorizados por relevancia y son presentados al usuario iniciando por el más relevante. Figura 2. El proceso de consulta. [2] El sistema de búsqueda incluye las funcionalidades previamente explicadas y cuenta además de otros módulos. Los componentes de los que consta el sistema son: • Motor de búsqueda: Encargado de recolectar, actualizar documentos, contenidos y generar un índice de contenidos. • Interfaz de usuario para búsqueda: Es la interfaz que utilizaran los usuarios para efectuar búsquedas de información y ver los resultados • Interfaz de usuario para administración: Se refiere a la interfaz de usuario que utilizarán los administradores de la aplicación para realizar actividades diversas como actualización de contenidos, parar el sistema, entre otras. • Servicios para actualizar o agregar documentos: Este componente se utilizará para agregar contenido nuevo o actualizar el contenido existente en el sistema • Otros servicios: Se refiere a componentes encargados de otras actividades por ejemplo healthchecks, reportadores, analizadores de datos, entre otros. A grandes rasgos la arquitectura básica del sistema de búsqueda es el siguiente. El motor de búsqueda está basado en el software IBM Biginsights trabajando en conjunto con Nutch. Las aplicaciones web del sistema, la interfaz de usuario, de administración y servicios de documentos están programadas en Java EE. Los servicios adicionales están programados en Java SE. Estas no son todas las tecnologías involucradas en el desarrollo del sistema de búsqueda. En el siguiente capítulo se tiene la información más relevante de todas las tecnologías empleadas Capítulo 2: Tecnologías Involucradas En esta sección se hablará de las diferentes tecnologías involucradas en el desarrollo del sistema de búsqueda. Esta información ayudará a que comprender el siguiente capítulo que trata sobre los componentes del sistema. 2.1 IBM InfoSphere Biginsights Biginsights es una plataforma para el análisis y visualización de volúmenes de información de escala grande. Fue diseñada en base a Apache Hadoop, la cual es a su vez una plataforma de cómputo distribuido de código abierto. En el sistema esta plataforma es usada como el componente principal del motor de búsqueda. Antes de entrar en los aspectos específicos de Biginsights primero necesitamos conocer sobre el concepto de “Big Data” y sobre la tecnología Hadoop. 2.1.1 Big Data El término Big Data se refiere a “la tendencia en el avance de la tecnología que ha abierto las puertas hacia un nuevo enfoque de entendimiento y toma de decisiones, la cual es utilizada para describir enormes cantidades de datos (estructurados, no estructurados y semi estructurados) que tomaría demasiado tiempo y sería muy costoso cargarlos a un base de datos relacional para su análisis. De tal manera que, el concepto de Big Data aplica para toda aquella información que no puede ser procesada o analizada utilizando procesos o herramientas tradicionales. Sin embargo, Big Data no se refiere a alguna cantidad en específico, ya que es usualmente utilizado cuando se habla en términos de petabytes y exabytes de datos.” [2] En la definición anterior tenemos la siguiente clasificación de datos: • Datos estructurados: son los que recolectan uno o varios valores definidos simultáneamente y se les asignan una cantidad de memoria definida. • Datos no estructurados: almacenan tipos de valores no predefinidos almacenan como “documentos” u “objetos” sin estructura uniforme. • Datos semi estructurados: son tipos de datos que puede consistir de datos estructurados y no estructurados, no necesariamente tienen que tener todos sus atributos definidos. Además de que existe una gran cantidad de información, esta misma existe en una gran variedad de datos que pueden ser representados de diversas maneras, por ejemplo dispositivos móviles, audio, video, sistemas GPS, sensores digitales, automóviles, medidores eléctricos, entre otros, de manera que las aplicaciones que analizan estos datos necesitan que la velocidad de respuesta sea lo demasiado rápida para lograr obtener la información correcta en el momento preciso. Estas características en la información hacen que el concepto Big Data se consolide como una manera de manejar datos. En el artículo de R. Barranco [2] se sugiere que “existe una amplia variedad de tipos de datos a analizar, una buena clasificación nos ayudaría a entender mejor su representación, aunque es muy probable que estas categorías puedan extenderse con el avance tecnológico.” Los tipos de datos mencionados en el artículo son [2]: 1.- Web and Social Media: Incluye contenido web e información que es obtenida de las redes sociales como Facebook, Twitter, LinkedIn, etc, blogs. 2.- Machine-to-Machine (M2M): M2M se refiere a las tecnologías que permiten conectarse a otros dispositivos. M2M utiliza dispositivos como sensores o medidores que capturan algún evento en particular (velocidad, temperatura, presión, variables meteorológicas, variables químicas como la salinidad, etc.) los cuales transmiten a través de redes alámbricas, inalámbricas o híbridas a otras aplicaciones que traducen estos eventos en información significativa. 3.- Big Transaction Data: Incluye registros de facturación, en telecomunicaciones registros detallados de las llamadas (CDR), etc. Estos datos transaccionales están disponibles en formatos tanto semiestructurados como no estructurados. 4.- Biometrics: Información biométrica en la que se incluye huellas digitales, escaneo de la retina, reconocimiento facial, genética, etc. En el área de seguridad e inteligencia, los datos biométricos han sido información importante para las agencias de investigación. 5.- Human Generated: Las personas generamos diversas cantidades de datos como la información que guarda un call center al establecer una llamada telefónica, notas de voz, correos electrónicos, documentos electrónicos, estudios médicos, etc. Figura 3. Tipos de datos empleados en Big Data. [2] El contexto de Big Data en el sistema de búsqueda que se desarrolló se refiere a los documentos o el tipo de información que pueden encontrar los usuarios, por ejemplo, archivos de diferentes tipos (pdf, documentos office, documentos open office, html, xml, binarios, entre otros) de los cuales existe un gran volumen de información misma que el sistema requiere procesar rápidamente para dar una respuesta. 2.1.2 Apache Hadoop Hadoop es un framework de software que permite el procesamiento distribuido de grandes volúmenes de información en clusters de computadoras usando modelos de programación simples. Está diseñado para escalar desde servidores únicos hasta miles de computadoras que ofrecen cada una cómputo y almacenamiento local. En lugar de depender de hardware para lograr alta disponibilidad. Está diseñado para detectar y manejar fallas en la capa de aplicación, para de esta forma entregar un servicio altamente disponible. [3] Hadoop está basado en el proyecto de Google, File System (GFS) y en el paradigma de programación MapReduce, el cual consiste en dividir en dos tareas (mapper y reducer) para manipular los datos distribuidos a nodos de un clúster logrando un alto paralelismo en el procesamiento. Incluye también otras tecnologías de código abierto. Está compuesto de los módulos [3]: • Hadoop Common: Utilerías communes de soporte. • Hadoop Distributed File System (HDFS™): Un sistema de archivos distribuidos que provee de alta disponibilidad a datos de aplicación • Hadoop YARN: Un framework para planificación de tareas y manejo de recursos de clusters • Hadoop MapReduce: Un sistema basado en YARN para el procesamiento en paralelo de grandes volumenes de información. De [4] los módulos fundamentales de Hadoop son HDFS y MapReduce. La funcionalidad de HDFS es proveer una manera para almacenar la información y MapReduce es una forma de procesar la información de manera distribuida. Hadoop consiste en muchas computadoras conectadas, llamadas DataNodes, los cuales almacenan informacion en sus sistemas de archivos locales y procesan la informacion dirigidos por un nodo de control cental. Los nodos de control consisten en los siguientes procesos: • NameNode: Este proceso mantiene la metadata que tiene que ver con donde esta almacenados los datos en los DataNode. Cuando un trabajo se presenta , la metadata es accesada para poder localizar los bloques de datos que el trabajo necesita. • NameNode secundario: Este nodo tiene un punto de control de la metadata en el NameNode, tambien como archivo editable que contiene la informaci[on de todos los cambios hechos a la localizacion de los datos. Este nodo es redundante a el NameNode y aumenta la velocidad significativamente si falla en NameNode • JobTracker: Cuando un trabajo de tipo MapReduce es presentado, el JobTracker decide en cual nodo se lleva a cabo el trabajo, coordina el procesamiento distribuido para asegurar que los nodos que tienen los datos locales inicien Map y Reduce. Tambien , si es posible, se asegura que el trabajo se lleve a cabo en multiples nodos. En cada DataNode, se encuentra también un TaskTracker. Su rol es el de aceptar trabajos desde el JobTracker y crear un proceso de JVM para cada uno de estos trabajos. A continuación se muestra una imagen que detalla a alto nivel el funcionamiento de una configuración de Hadoop Ya que Hadoop se trata de una arquitectura de procesamiento por lotes, la mayor ventaja que tiene es que permite consultas a la medida para ejecutar en un conjunto de datos y devolver los resultados en un plazo de tiempo razonable. El cómputo distribuido a través de un clúster de varios nodos es lo que permite este nivel de procesamiento de datos tenga lugar. 2.1.2.1 MapReduce La aplicación de MapReduce es el poder procesar grandes cantidades (varios terabyte) de datos en paralelo en grandes clusters de manera fiable y tolerante a fallos. MapReduce es un paradigma computacional en el que una aplicación se divide en unidades autónomas de trabajo. Cada una de estas unidades de trabajo se puede ejecutar en cualquier nodo del clúster. Un trabajo MapReduce divide el conjunto de datos de entrada en partes independientes que son procesados tareas “map” en paralelo. El framework ordena las salidas de las tareas “map”, las cuales se ingresan tareas “reduce”. Las entradas y salidas de trabajo se almacenan en el sistema de archivos. El framework MapReduce y el sistema de archivos HDFS están normalmente en el mismo conjunto de nodos, lo que permite al framework agendar tareas en los nodos que contienen datos. El framework MapReduce consta de un JobTracker primario y un TaskTracker secundario por nodo. El nodo primario agenda, tareas, componentes de trabajo, trabajo de monitoreo, y vuelve a ejecutar las tareas falladas, y el nodo secundario ejecuta tareas según las indicaciones del nodo primario. De lo anterior observamos que MapReduce consiste en las etapas: • Map • Reduce La fase map es la primera parte de la secuencia de procesamiento de datos dentro de MapReduce. Las funciones map sirven de nodos que trabajan y son capaces de procesar varios fragmentos pequeños del conjunto de datos. MapReduce es responsable de dividir el conjunto de datos de entrada en trozos más pequeños, y los llevan a su trabajo de map correspondiente. Cuando se escribe un función map, no hay necesidad de incorporar lógica para activar la función de crear varios mapas capaces de aprovechar la arquitectura de computación distribuida de Hadoop, esto mismo es una funcionalidad por defecto. De la misma manera que se tiene la función de map, los desarrolladores también necesitan de una función de reducción (Reduce). La pares “clave/valor” de las salidas de la función map, deben corresponder a la partición de reducción adecuada de manera que los resultados finales son agregados a datos correspondientes apropiadamente. Este proceso de mover las salidas de la función map hacia las funciones de reducción es conocida como “shuffling” Una vez que el proceso “shuffling” ha finalizado y los reductores (encargados de las funciones de reducción) ha copiado todas las salidas de la función de map, los reductores pueden entrar en lo que se conoce como un proceso de mezcla. Durante esta etapa de la fase de reducción, todas las salidas de la función map se pueden combinar juntas manteniendo su tipo de petición establecido durante la fase de map. Una vez que la mezcla final termina (esto se realiza en las rondas con fines de optimización del rendimiento), la última tarea de reducción de la consolidación de todos los resultados para cada clave dentro de la salida ya mezclada, y el resultado final se escriben en el HDFS. [5] El flujo completo con una tarea sencilla de reducción se ilustra a continuación. Las cajas punteadas son nodos, las flechas punteadas muestran transferencias de datos en un nodo y las flechas continuas muestran transferencia de datos entre nodos. Figura 4. Ejemplo de Mapreduce con una tarea sencilla de reducción. [4] La cantidad de tareas de reducción no depende del tamaño de la entrada, este es especificado independientemente. Cuando existen múltiples reductores, las tareas de map particionan sus salidas, cada una crea una partición para cada tarea de reducción. Pueden existir múltiples claves asociadas a cada partición, pero los registros para una clave específica están en una partición sencilla. El particionamiento puede ser controlado por funciones de particionamiento definidas por el usuario, pero normalmente el particionador por defecto de Hadoop funciona bien. [5] El flujo de datos para el caso general donde se tienen múltiples tareas de reducción se ilustra en la siguiente figura. Este diagrama clarifica porque el flujo de datos entre tareas map y reduce se denomina “shuffling” (barajear) , ya que cada tarea de reducción es alimentada por múltiples tareas map. El “shuffling” es más complicado que lo que sugiere este diagrama y mejorarlo puede tener un impacto grande en el tiempo de ejecución. Figura 5. Flujo de datos en MapReduce con múltiples tareas de reducción[4] 2.1.3 Características de Biginsights Es un producto de IBM construido en base a la tecnología Apache Hadoop diseñado para hacer que el procesamiento distribuido sea fácilmente implementado. Biginsights mejora la tecnología Hadoop para satisfacer demandas empresariales, agregando funcionalidades administrativas, de flujo de trabajo y de seguridad, además de capacidades analíticas provistas por el equipo de investigación de IBM. Por lo cual se obtiene un sistema más amigable para los desarrolladores y usuarios para el análisis complejo a larga escala. IBM InfoSphere BigInsights está integrado por los siguientes componentes [6]: • La distribución de IBM de Apache Hadoop, la cual contiene Apache Hadoop, una versión de 64-bit para Linux del IBM SDK para Java 6 • IBM InfoSphere BigInsights Jaql, un lenguaje de consultas basado en JavaScript Object Notation (JSON), el cual es primariamente usado para analizar información semi-estructurada de larga escala • Avro, un sistema de serialización de información • Flume , un servicio distribuido, confiable y de alta disponibilidad para mover eficientemente grandes cantidades de información alrededor de un cluster. • HBase, una base de datos distribuida y no relacional escrita en • Hive, una infraestructura de data warehouse que facilita tanto la transformación y carga de extracción de información y el análisis de cargas de información grandes almacenados en el Sistema de Archivos Distribuidos de Hadoop (HDFS). • Lucene, Una librería de motor de búsqueda de alto desempeño escrita en Java • Oozie, un coordinador de flujos de trabajo • Orchestrator, un avanzado sistema de control de trabajos MapReduce que usa el format JSON para describir los trabajos y la relación que existe entre ellos. • Pig (0.70), una plataforma para analizar grandes cargas de información que consiste en un lenguaje de alto nivel para expresar programas de análisis de datos y una infraestructura para evaluar dichos programas • BigInsights scheduler, el cual asegura que todos los trabajos obtengan una compartición de recursos apropiada • ZooKeeper , un servicio centralizado para mantener información sobre • Algunos de estos productos son proyectos de código abierto y han sido particularmente probados por IBM para asegurar que estas versiones funcionan a la perfección. Existen también algunos otros componentes nuevos que ha desarrollado IBM para agregar valor a estas tecnologías los cuales se encuentran en las dos versiones de Biginsights, la versión Básica (Biginsights Basic Edition) y la versión Empresarial (Biginsights Enterprise Edition) siendo la segunda la que cuenta con más funcionalidades. Figura 5. Ediciones de Biginsights. [6] La edición básica está disponible para su descarga gratuita y puede gestionar hasta 10 Terabytes de datos. Por lo tanto, es conveniente para proyectos piloto y trabajos de exploración. La edición empresarial es de paga y no tiene restricciones de licencia sobre la cantidad de datos que pueden ser administrados. Incluye todas las características de la Edición básica y ofrece analíticas adicionales, administrativas y capacidades de software de integración, por lo cual la edición empresarial es adecuada para aplicaciones de producción. [7] Para el motor del sistema de búsqueda se utiliza la versión empresarial de Biginsights, de esta versión existen dos componentes desarrollados por IBM, y que por tanto no se encuentran en Hadoop, que han proporcionado muchos beneficios al sistema. Instalador Gráfico Uno de los componentes desarrollados específicamente para Biginsights es el instalador gráfico, el cual es una herramienta web compatible con la mayoría de las versiones de los navegadores Firefox , Google Chrome e Internet Explorer. El instalador configura todo el software que selecciona el administrador y se puede observar el progreso de la instalación en tiempo real, así mismo cuenta con herramientas de “health check” que automáticamente verifican y reportan si la instalación fue correcta o no y los detalles de instalación. El instalador ofrece los siguientes beneficios [4]: • Instalación sencilla, no se requieren de habilidades especiales. • Instalación rápida que incluye un inspector de instalación el cual requiere sólo un periodo de tiempo corto para realizar y verificar la instalación. • Componentes probados previamente los cuales incluyen versiones que se han probado y funcionan de forma integrada sin problemas. • Instalación en un solo nodo a través de una interfaz de usuario la cual es útil para los desarrolladores si no necesita cambiar o personalizar la configuración durante el proceso de una instalación para múltiples nodos. • Una opción de instalación de varios nodos, ya sea a través de una interfaz gráfica de usuario o la línea de comandos para instalar los componentes con facilidad a través de múltiples nodos. El proceso de instalación de Biginsights incluye los siguientes pasos: 1.- Definir el tipo de instalación Existe la opción de instalar Biginsights solamente en un nodo, la cual es llamada instalación pseudo-distribuida, incluye configuración por defecto de todos los componentes y es posible agregar más nodos en un futuro que soporten la configuración establecida. Existe también la instalación en cluster , es la más común ya que soporta configuración de múltiples nodos distribuidos y permite la configuración completa o específica para cada componente a instalar (ver figura 6). 2.- Configuración del sistema de archivos En esta etapa de la instalación se definen el directorio raíz, el directorio donde será instalado Biginsights , el directorio donde se crean los archivos de historial (logs) y el directorio donde MapReduce maneja los archivos de sistema (ver figura 7). 3.- Configuración SSH Aquí se configuran el usuario administrador de sistema y el usuario administrador de Biginsights que deberá contar con configuración SSH sin contraseña para poder establecer comunicación entre los nodos. Más información sobre la tecnología SSH y su configuración se encuentra más adelante en el apartado de Linux en este documento. 4.- Configuración de nodos Aquí se define la localización de cada uno de los nodos de los que se compone la configuración del sistema de sistema distribuido de Biginsights, se definen en este paso las direcciones IP de cada nodo y su contraseña del ususario administrador. 5.- Configuración específica para los componentes En esta etapa se definen configuraciones de nodos, de la base de datos Derby, configuraciones de Jaql, puerto del TastTracker, directorios de datos para los nodos y para TasckTracker, configuraciones de Hive, Pig, Zookeper, HBase 6.- Revisión e Instalación Después de especificar todas las configuraciones se muestra una pantalla con el resumen de la configuración del sistema y se muestra el botón para iniciar la configuración mencionada. 7.- Resultados Aquí se muestran los resultados de la configuración general nodo por nodo y de los componentes instalados. Figura 6. Tipos de instalación [5] Figura 7. Configuración del sistema de archivos. [5] Figura 8. Configuración SSH [5] Figura 9. Configuración de nodos [5] Figura 10. Configuración de componentes 1 [5] Figura 11. Configuración de componentes 2 [5] Figura 12. Configuración de componentes 3 [5] Figura 13. Resumen de la instalación [5] Figura 14. Resultados de la instalación [5] Consola de Administración Web La consola de administración es un componente que se instala por defecto e incluye herramientas para administradores, desarrolladores y analistas de negocios. Después de instalado Biginsights se puede accesar a la consola por medio de un navegador web utilizando la dirección http://<host name>:8080 o la dirección https://<host name>:8443 para instalaciones con SSL. Figura 15 . Pantalla inicial de la consola de administración [8] En la consola de administración encontramos herramientas para monitoreo del estado del clúster, monitoreo del servicio de Biginsights, navegación del sistema de archivos, monitoreo de trabajos de Biginsights, entre otras. Figura 16. Estado del clúster [8] Figura 17 . Estado de servicios de Biginsights [8] Figura 18 . Navegacion del sistema de archivos [8] Figura 19 . Monitoreo de trabajos [8] 2.2 Java Java es un lenguaje de programación de alto nivel orientado a objetos desarrollado en 1995 por la empresa Sun Microsystems (ahora perteneciente a la empresa Oracle) su sintaxis es parecida a la del lenguaje C. Una de sus características principales es que Java elimina procedimientos de bajo nivel, tales como manejo de apuntadores o gestión de memoria lo cual reduce considerablemente los errores de programación y aumenta la productividad de los desarrolladores. Otra de sus características es que la memoria es manejada automáticamente por un recolector de basura (llamado Garbage Collector) que se encarga de eliminar sistemáticamente de memoria los elementos que ya no se utilizarán. Las aplicaciones de Java no son compiladas a código o ejecutables nativos sino que corren sobre una máquina virtual (llamada Java Virtual Machine o JVM), esto permite que java pueda correr en cualquier sistema que tenga implementada la máquina virtual. Esto hace que Java sea multiplataforma ya que existen implementaciones de la JVM para diferentes sistemas operativos tales como Windows, Linux, Unix, Mac Os, entre otros. En Java [8] “el código fuente es escrito en archivos de texto plano que terminan con la extensión .java. Estos archivos fuente son entonces compilados en archivos con terminación .class por el compilador javac. Un archivo .class no contiene código nativo para el procesador, en su lugar contiene bytecode, el lenguaje máquina de la Java Virtual Machine”. Cada programa de Java en una instancia de la JVM. Figura 20 . Proceso de desarrollo en Java [9] La plataforma Java tiene dos componentes: • La máquina virtual • La interfaz de programación de aplicaciones Java, conocida como Java Application Programming Interface (API) La API es una colección de componentes multipropósito listos para ser usados y que están incluidos en Java. La API se agrupa en librerías de clases e interfaces relacionadas conocidas como paquetes y que en conjunto proporcionan la funcionalidad completa de Java. Existen cuatro plataformas del lenguaje de aplicación Java [10]: • Java Platform, Standard Edition (Java SE) • Java Platform, Enterprise Edition (Java EE) • Java Platform, Micro Edition (Java ME) • JavaFX Java SE Es la edición estándar de java (Java Standard Edition) y permite desarrollar aplicaciones de escritorio y para servidores, provee la funcionalidad nuclear del lenguaje de programación Java. Define todo desde tipos de datos y objetos del lenguaje hasta clases de alto nivel que son usadas para funcionalidades de redes , seguridad, acceso a bases de datos, desarrollo de interfaces de usuarios gráficas (GUI) y lectura de XML. Java EE Es la edición empresarial de Java (Java Platform, Enterprise Edition ) el cual es un estándar para computo empresarial en Java. Está construido en base a Java SE, incluye un API y un ambiente para correr y desarrollar aplicaciones en red de larga escala, de múltiples capas, escalables, confiables y seguras. Java ME Contiene una API y una máquina virtual pequeña para correr aplicaciones Java en dispositivos pequeños y limitados, como dispositivos móviles. Su API es un subconjunto de clases de Java SE e incluye clases especializadas para el desarrollo en dispositivos móviles. Java FX Es una plataforma basada en Java para el desarrollo de aplicaciones de internet ricas (Rich Internet Applications o RIAS) contiene una API ligera basada en Java SE y especializada para el desarrollo de aplicaciones gráficas o multimedia que se conectan a internet. El lenguaje de programación en el que están desarrolladas todas las aplicaciones web del sistema de búsqueda es Java edición empresarial (J2EE) utilizando principalmente JSP y Struts. Existen también otras herramientas utilizadas en el sistema de búsqueda desarrolladas en Java edición estándar (J2SE). Así mismo se utilizan diferentes frameworks para Java en el desarrollo de las aplicaciones. 2.2.1 Servlets y JSP Los Servlets son programas codificados en Java que se ejecutan en un servidor de aplicaciones web (más información acerca de servidores de aplicaciones en el apartado de Websphere) y construyen páginas web al vuelo y a la medida, es decir páginas web cuyo contenido no es estático y que cambia dependiendo de los datos que el usuario introduce y son conocidas como páginas web dinámicas. En [11] se mencionan algunas de las ventajas de las páginas web dinámicas: • La página web está basada en datos enviados por el usuario. Por ejemplo, las páginas de resultados de los motores de búsqueda se generan de esta forma, y los programas que procesan pedidos desde sitios de comercio electrónico también. • Los datos cambian frecuentemente. Por ejemplo, un informe sobre el tiempo o páginas de cabeceras de noticias podrían construir la página dinámicamente, quizás devolviendo una página previamente construida y luego actualizándola. • Las páginas web que usan información desde bases de datos corporativas u otras fuentes. Por ejemplo, usaríamos esto para hacer una página Web en una tienda on- line que liste los precios actuales y el número de artículos en stock. Por otro lado tenemos a JSP (Java Server Pages) que son “documentos de texto que contienen dos tipos de datos; estáticos, datos que pueden ser presentados en cualquier formato basado en texto (HTML, SVG, WML y XML) y elementos de JSP los cuales construyen contenido dinámico.” [12] Cuando se desarrollan aplicaciones web Java usualmente se utiliza una combinación de Servlets y JSP para obtener los beneficios de ambos. Los Servlets son en realidad clases Java, por tanto , tiene sentido usarlos para los requerimientos de procesamientos en una aplicación web. Similarmente los JSP son primariamente código HTML, por tanto , tiene sentido usarlos en el diseño web de una aplicación. Para usarlos eficientemente el procesamiento de la aplicación se hace en Servlets y después se mandan los objetos a JSP. [13] 2.2.2 Frameworks de Java Un framework es un software especializado para proveer de alguna funcionalidad genérica, en otras palabras es una plataforma usada para el desarrollo de aplicaciones. A diferencia de las librerías, un framework es más complejo y robusto además ofrece la posibilidad de sobre escribir su funcionalidad para adaptarla a las necesidades de programación que se tengan. El propósito primario de un framework es el de ayudar y facilitar el proceso de desarrollo de una aplicación. Debe permitir desarrollar la aplicación de manera fácil y rápida y el resultado debe ser una aplicación superior. Es importante que se evalúe el beneficio para determinar si vale la pena la curva de aprendizaje del framework. Los frameworks son valiosos en todas las etapas del desarrollo, desde el diseño hasta la implementación e incluso en etapas posteriores. [14] A continuación se muestran los principales frameworks utilizados en el desarrollo del sistema de búsqueda, se mencionarán sus características más importantes y las funcionalidades que se aprovecharon. 2.2.2.1 Struts 2 Struts es un framework para el desarrollo de aplicaciones web que utiliza el patrón de diseño MVC (Modelo Vista Controlador). Struts es un proyecto de código libre y permite reducir el tiempo de desarrollo. Permite construir fácilmente aplicaciones web robustas y mantenibles. Struts se caractetiza por su [15]: • Simplicidad: Struts es relativamente fácil de aprender y de usar efectivamente. Se obtiene mucho de Struts a cambio del esfuerzo empleado en aprenderlo. • Robustez: Struts provee la mayoría de la infraestructura necesaria para la creación de aplicaciones web. Se puede confiar en su código probado y construido con principios de diseño sólidos, en lugar de tener que desarrollar soluciones propias. • Sustentabilidad: Struts está construido dentro del patrón de diseño MVC el cual promueve la separación de varias porciones de la aplicación. Además de esto Struts tiene una base de usuarios grande y es un componente vital de muchas aplicaciones empresariales basadas en Java[15]. Struts tiene los siguientes beneficios: • Se basa en el Modelo MVC • Soporta Java • Soporta diferentes implementaciones de modelos (JavaBeans, EJB, etc.) • Incluye un conjunto de librerías de JSP • Contiene muchos puntos de extensión para personalización • Soporta diferentes implementaciones de presentación (JSP, XML/XSLT, JavaServer Faces 2.2.2.2 Log4j Log4j es un framework orientado al registro de datos en una aplicación, actividad mejor conocida como “logging” y se refiere a indicar de alguna manera el estado del sistema durante el tiempo de ejecución. La actividad de “logging” es una forma sistematizada y controlada de representar el estado de una aplicación de forma que sea entendible por el usuario. El API de Log4j simplifica escribir código para logging dentro de una aplicación y permite la flexibilidad de controlar la actividad de logging desde un archivo de configuración externo. También permite publicar información de registro a l grado de granularidad deseado dependiendo del novel de detalle en el registro de información necesario para cada aplicación. [16] Se puede confeccionar la granularidad de la actividad de “logging” apto para la fase de desarrollo o de implementación de la aplicación sin necesidad de cambiar código fuente. Es posible cambiar a un comportamiento diferente solo cambiando unos pocos parámetros de configuración. También es posible publicar la información de “logging” a varios destinos tales como archivos o consolas. [16] Esta API también permite tomar la información de “logging” u publicarla o imprimirla en formatos diferentes y diseños de lectura amigables a usuarios y reusable por programas analizadores de errores. [16] Log4J maneja varios niveles de granularidad para el registro de mensajes o “logging”. • OFF: En este nivel el registro se encuentra deshabilitado • FATAL: Este nivel se utiliza para mostrar solamente mensajes críticos del sistema, por lo general este tipo de mensajes muestran errores que terminan con la ejecución del sistema • ERROR: Se utiliza para mostrar mensajes que indican errores durante la ejecución del programa que si bien pueden ser graves, durante este tipo de errores por lo general el sistema sigue en ejecución • WARN: En este nivel se muestran mensajes de alerta o precaución y no afectan la ejecución del sistema • INFO: Se utiliza para mostrar mensajes sobre la ejecución o el estado actual del sistema que ocurren durante el funcionamiento normal y esperado del sistema • DEBUG: Este nivel se utiliza para mostrar mensajes de depuración o “debugging” , por lo general este nivel se implementa en ambientes donde el sistema corre a modo de prueba como por ejemplo ambientes de desarrollo o de pre producción. • TRACE: Este nivel se utiliza para mostrar mensajes de depuración que contienen mayor nivel de detalle que el nivel DEBUG. • ALL: Este nivel habilita todos los niveles anteriores Utilizar Log4j en aplicaciones J2EE es complejo debido a una serie de factores. El nivel del granularidad de la aplicación depende de las necesidades o características del sistema. En [5] se denotan algunas características importantes de “logging” en una aplicación J2EE: • Distribuido: J2EE es distribuido por naturaleza. Cualquier actividad de “logging” asociada a un ambiente J2EE debe también ser distribuida • Multiusuario: Múltiples usuarios de varias localidades acceden de manera frecuente a aplicaciones J2EE • Implementación de Cluster: Las aplicaciones J2EE son frecuentemente implementadas en ambientes de clusters para mejorar el desempeño. Mantener la información de “logging” en múltiples clusters es un reto. • Centralizado: La información de “logging” necesita ser centralizada para ser efectiva • Cronológica: En muchas aplicaciones J2EE, el orden de la información es muy importante. Es necesario asegurarse de que la información esté en orden cronológico • Identificación: La información de “logging” necesita tener una estampa con un identificador único para separar a un invocador de otro, de lo contrario la información sería muy grande como para filtrarla por operaciones en particular, por usuario o por invocador. 2.3 FreeMarker Referencias [1] Search Engines. Information Retrieval in Practice. Noviembre 2012 [En línea] Disponible en: http://dg3rtljvitrle.cloudfront.net/slides/chap1.pdf [2] IBM Developer Works, “Qué es Big Data?”. Noviembre 2012 [En línea] Disponible en: http://www.ibm.com/developerworks/ssa/local/im/que-es-big data/index.html [3] Welcome to Apache™ Hadoop®! Noviembre 2012 [En línea] Disponible en: http://hadoop.apache.org/ [4] M. Ebbers et al, “Implementing IBM InfoSphere BigInsights on System x” IBM Redbooks, vol 1, pp. 14-19 , Octubre 2012 [5] T. White, “Hadoop. The Definitive Guide” O Reilly, 2da edicion, pp. 27-30 , Octubre 2012 [6] IBM InfoSphere BigInsights Information Center Noviembre 2012 [En línea] Disponible en: http://publib.boulder.ibm.com/infocenter/bigins/v1r1/index.jsp [7] Understanding InfoSphere BigInsights An introduction for software architects and technical leaders Noviembre 2012 [En línea] Disponible en: http://www.ibm.com/developerworks/data/library/techarticle/dm-1110biginsightsintro/ [8] Exploring your InfoSphere BigInsights cluster and sample applications Noviembre 2012 [En línea] Disponible en: http://www.ibm.com/developerworks/data/library/techarticle/dm1204infospherebiginsights/index.html [9] About the java Technology Noviembre 2012 [En línea] Disponible en: http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html [10] The Java Programming Language Platforms Noviembre 2012 [En línea] Disponible en: http://docs.oracle.com/javaee/6/firstcup/doc/gkhoy.html#gcrkk [11 ] Libro, Servlets y JSP http://departamentos.unican.es/macc/asignaturas/java/Java/servlets/servletsjsp.pdf [12] What Is a JSP Page? Noviembre 2012 [En línea] Disponible en: http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro2.html [13] Libro. Murach´s Java Servlets and JSP [14] Libro Java Frameworks and Components-Accelerate Your Web Application Development [15] Libro Struts Beginning Apache Struts From Novice to Profession [16] Libro pro log4j