Desarrollo de herramientas empresariales para la búsqueda de

Anuncio
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
Descargar