101crawlersweb's People
101crawlersweb's Issues
Arquitectura
Creación de una página en la wiki que describa la arquitectura del sistema y que incluya diagramas que permitan comprender de un golpe de vista todo el sistema. Debe funcionar como biblia para resolver dudas de alto nivel.
¿Cuáles son los objetivos del TFG?
Los artefactos del TFG deberían ser:
- Un DSL con su correspondiente librería que permita especificar un trabajo de crawler que se transforma en una especificación de Docker (Dockerfile) que crea un Nutch a medida
- Una aplicación que puede gestionar desde línea de comandos dicho DSL creando, ejecutando y parando un contenedor. Esta aplicación debe ser capaz de poner en marcha un sistema de almacenamiento masivo para guardar los resultados y permitir hacer operaciones básicas de extracción de dichos resultados.
- Una aplicación Web que permita que múltiples usuarios puedan de forma concurrente utilizar la máquina local donde se encuentra la aplicación Web o varias máquinas remotas que pueden hospedar contenedores Docker para realizar tareas de crawler. La aplicación Web asegura que todas ellas utilizan el mismo sistema de almacenamiento de resultados y ofrece una API de extracción.
Web API para el anterior - Según como vaya me gustaría intentar realizar algo relacionado con machine learning/aprendizaje automático/clustering/recuperación de información, es decir, realizar por ejemplo mejores algoritmos o técnicas para la recuperación de la información de la API antes nombrada. Por ejemplo, sistemas de recomendación de búsquedas, clustering de toda la info recogida, resumidores, etc… . Esto ya sería por el final, pensando alguna idea concreta. Algo más enfocado también a la computación.
@Shathe tiene que revisar, confirmar, ordenar esta lista.
Spring shell remote
[Mirar ultimo comentario] Buscar ejemplos sobre Spring shell remote, ver cómo encajaría en el proyecto, como por ejemplo para monitorizar al aplicación.
Montar un ejemplo simple para el sistema y probar que funciona documentando cada paso.
Implementar el DSL y realizar su documentación
Una vez se tengan los scripts de configuración, realizar el DSL y su documentación para que los usuarios puedan configurarlo a través de él. Este DSL utilizará los scripts de configuración por debajo.
Integración de un sistema de búsqueda básico
Crear un sistema de extracción de datos a un FS (de momento local) y utilizando por ejemplo Sorl, crear un sistema de búsqueda sobre este FS
Establecer el mecanismo para controlar esfuerzos del TFG
Dentro del grupo IAAA hay un mecanismo para controlar los esfuerzos. El sistema está bien documentado y permite controlar cuantas horas se dedica a un proyecto. El número de horas y su desglose es un dato que tienen en cuenta los examinadores en la nota final del TFG.
Extraer datos fuera de la contenedor
Elaborar una estrategia para extraer los datos del contenedor.
Analizar a nivel de arquitectura la integración de Solr en el sistema
El problema de que como la idea es tener muchas instancias/contenedores de docker funcionando, la idea de Solr es dar acceso a la info recopilada por una url y un puerto, localmente. El problema viene que esto no puede hacerse a aquí porque no sabrías que puertos dar a los diferentes contenedores, además de que se acabarían los puertos, creo que para la extracción de información en el caso de docker, lo mejor es extraer el dump de cada contendor cuando se quiera al servidor donde se aloje el sistema y ya hacerlo que quieras con el.
Reemplazar File.mkDir por Files.createDirectory en AdapterBuilder
Files.createDirectory
es la forma preferida para crear directorios en Java 7. También hay que decidir que hacer si el directorio no se puede crear. ¿Cuál debería ser el comportamiento si el directorio ya existía?
Evaluar una librería para el shell para interactuar con una instancia como daemon
El DSL y las instancias de docker son controladas mediante una aplicación de línea de comandos. La mejor opción que se me ocurre es utilizar librerías que simplifiquen su creación. Hay dos que pueden ser de referencia:
- CRaSH que se utiliza dentro de Spring Boot para shells remotos.
- Spring Shell es un subproyecto de Spring que permite la creación de un cliente de línea de comandos con menor potencia que CRaSH.
Hay que identificar si hay otras librerías posibles que se puedan utilizar a parte de estad dos y analizar de forma razonada cual de ellas es la más adecuada.
Crear la configuración básica de Nutch a partir del DSL
A partir de la tarea #14 crear un Builder
de configuración para una versión específica de Nutch (salida ficheros XML de Nutch) y un adaptador del modelo neutral la Builder
(entrada: modelo neutral de craweler, salida: builder configurado o los ficheros XML de Nutch).
Siguiente iteración
Hablar sobre la consola que hay que crear para el sistema, qué operaciones soportará.
(Aún no hay nada imlementado de creacion, ni operaciones con docker, solo los scripts, estas funcionalidades tendrán que ir con la consola).
La consola tendrá la funcionalidad mínima de los scripts, pero tmabién tendrá que poder monitorizar.
Posibles cosas que meter en la iteración: aplicación de extracción de datos + visualización, no es lo mismo extraer el fichero dump que se genera que realizar búsquedas en ese fichero.
Centrarse más en la arquitectura del sistema y la shell o en la Information ercovery?
-en vez de Solr, apache lucene? (experiencia con él)
Creación servicio web mínimo
Creación de un servicio web mínimo que soporte las operaciones básicas sobre proyectos (zip- dsl + ficheros) y Dockers
Comando CONFIG duplicado en wiki
En https://github.com/Shathe/101CrawlersWeb/wiki/Commands el comando CONFIG está duplicado
A complete tutorial Wiki for the system
Prepare a tutorial testing the system in a wiki, showing every command it is made
El comando `exit` no finaliza el cliente
Al ejecutarse el comando exit
el sistema se queda colgado y no vuelve a la línea de comandos.
Analizar configuraciones mínimas
Analizar qué configuraciones son mínimas para nutch y docker para que pueda funcionar mínimamente y dar una pequeña libertad de configuración. Descubrir exactamente qué base se necesitaría tener.
Añadir labels y assignee adecuadas a issues
Crear un wrapper en el shell para los comandos bash existentes
Convertir en comandos del shell de línea de comandos y del shell embebido los comandos ya implementados con bash
Identificar y describir cada uno de los comandos que butler va a tener
Esta tarea se reflejará en la wiki y formará parte de la memoria del TFG. Los comandos serán locales (que podrán ejecutarse de forma local desde la línea de comandos o con Spring Shell o de forma remota con un shell remoto) o de control remotos si pensamos en la idea de un nodo controlador de un conjunto de máquinas con dockers.
No todos ellos se van a implementar, se hace para determinar el tamaño del trabajo y prioridades.
El mensaje "Image built successfully" aparece en build cuando falla
Si el demonio de docker no está conectado.
101shell> build --idUser 1 --idCrawl 1
[WARN] es.unizar.iaaa.crawler.butler.commands.Operations - Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Image built successfully
Utilizar un sistema de logger para mensajes informativos y de error
Determinar el modo y realizarlo a lo largo de la aplicación completa.
Buscar y analizar ejemplos del uso de YAML para configuración
Una de las inspiraciones de este proyecto es Travis-CI y el uso que hace de YAML para especificar las máquinas a crear y las tareas a realizar. Hay que localizar ejemplos parecidos y tutoriales como https://dzone.com/articles/using-yaml-java-application que puedan servir de inspiración. Los resultados de la búsqueda hay que recogerlos aquí.
Hablar propuesta TFG
Hablar sobre la propuesta del tfg, qué poner, estructura, limitar el tfg para saber que poner. En resumen que @fjlopez me guíe para realizar una primera versión de la propuesta del tfg esta semana santa
NutchBuilder.configurePlugins falla cuando el directorio ya existe
Cuando el directorio ya existe se produce una excepción:
java.nio.file.FileAlreadyExistsException: usuarioId_CrawlId/protocol-file
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:88)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384)
at java.nio.file.Files.createDirectory(Files.java:674)
at es.unizar.iaaa.crawler.butler.builders.NutchBuilder.configurePlugins(NutchBuilder.java:91)
Se ignoraba en los test actuales ya que todas las excepciones se capturaban y se imprimian por la pantalla. Se ha modificado el código para que el test builder()
capture (es decir, falle) por esta excepción.
Asegurar que uno de los comandos reindexe el buscador local de la imagen
Si hay definido un buscador local, debe poderse mediante un comando solicitar la reindexación de los dumps para hacerlo bajo demanda.
Organización del siguiente milestone
Con esta issue organizaremos el trabajo.
Simplificar el log al construir la imagen de Docker
Este es un ejemplo de salidas:
[WARN] es.unizar.iaaa.crawler.butler.commands.Operations - ---> e584d1ce8b3a
[WARN] es.unizar.iaaa.crawler.butler.commands.Operations - Removing intermediate container 7bb8d23601fb
[WARN] es.unizar.iaaa.crawler.butler.commands.Operations - Step 28 : ADD nutch-site.xml crawler/conf/nutch-site.xml
[WARN] es.unizar.iaaa.crawler.butler.commands.Operations - ---> a6731febc248
[WARN] es.unizar.iaaa.crawler.butler.commands.Operations - Removing intermediate container 0c5d7ea93d24
En este caso podría ser mejor
[INFO] e.u.i.c.b.c.Operations - ---> e584d1ce8b3a
[INFO] e.u.i.c.b.c.Operations - Removing intermediate container 7bb8d23601fb
[INFO] e.u.i.c.b.c.Operations - Step 28 : ADD nutch-site.xml crawler/conf/nutch-site.xml
[INFO] e.u.i.c.b.c.Operations - ---> a6731febc248
[INFO] e.u.i.c.b.c.Operations - Removing intermediate container 0c5d7ea93d24
E incluso (sin dejar de utilizar el sistema de logger)
[docker] ---> e584d1ce8b3a
[docker] Removing intermediate container 7bb8d23601fb
[docker] Step 28 : ADD nutch-site.xml crawler/conf/nutch-site.xml
[docker] ---> a6731febc248
[docker] Removing intermediate container 0c5d7ea93d24
Eliminar los label "iñigo" y "Jorge"
Es redundante con Assignee
Borrar contenidos antiguos del proyecto
Limpiar el repositorio posiblemente mediante una solución tipo http://stackoverflow.com/questions/6842627/how-to-clean-all-commits-from-remote-github-repo pero sin perder todas issues, milestones y labels.
CrawlTimeoutsValidator no debe depender de Excepciones
El código confia 3 veces en que Integer.valueOf
no lance una excepción. El código sería más legible si utilizara Ints.tryParse
.
Verificar que el tutorial se puede ejecutar desde fuera de una IDE
Hay problemas con las rutas.
=======================================
* *
* 101Crawlers *
* *
=======================================
Version:0.0.1
Welcome to 101Crawlers CLI
101shell>config --file conf_tutorial.yml --idUser 1 --idCrawl 1
java.io.FileNotFoundException: ../conf_tutorial.yml (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at org.springframework.core.io.UrlResource.getInputStream(UrlResource.java:168)
at es.unizar.iaaa.crawler.butler.yalm.YamlConfigRunner.read(YamlConfigRunner.java:25)
at es.unizar.iaaa.crawler.butler.commands.Operations.readConfiguration(Operations.java:62)
at es.unizar.iaaa.crawler.butler.commands.BuildingCommands.config(BuildingCommands.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:216)
at org.springframework.shell.core.SimpleExecutionStrategy.invoke(SimpleExecutionStrategy.java:64)
at org.springframework.shell.core.SimpleExecutionStrategy.execute(SimpleExecutionStrategy.java:57)
at org.springframework.shell.core.AbstractShell.executeCommand(AbstractShell.java:127)
at org.springframework.shell.core.JLineShell.promptLoop(JLineShell.java:533)
at org.springframework.shell.core.JLineShell.run(JLineShell.java:179)
at java.lang.Thread.run(Thread.java:745)
Command failed java.lang.NullPointerException
101shell>config --file conf_tutorial.yml --idUser 1 --idCrawl 1
[WARN] es.unizar.iaaa.crawler.butler.commands.BuildingCommands - IOException: class path resource [templates] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Users/javier/Workspaces/TFG/InigoAlonso/butler/build/libs/butler.jar!/templates
java.io.FileNotFoundException: class path resource [templates] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Users/javier/Workspaces/TFG/InigoAlonso/butler/build/libs/butler.jar!/templates
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:218)
at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52)
at es.unizar.iaaa.crawler.butler.builders.AdapterBuilder.createConfigurationFiles(AdapterBuilder.java:73)
at es.unizar.iaaa.crawler.butler.commands.BuildingCommands.config(BuildingCommands.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:216)
at org.springframework.shell.core.SimpleExecutionStrategy.invoke(SimpleExecutionStrategy.java:64)
at org.springframework.shell.core.SimpleExecutionStrategy.execute(SimpleExecutionStrategy.java:57)
at org.springframework.shell.core.AbstractShell.executeCommand(AbstractShell.java:127)
at org.springframework.shell.core.JLineShell.promptLoop(JLineShell.java:533)
at org.springframework.shell.core.JLineShell.run(JLineShell.java:179)
at java.lang.Thread.run(Thread.java:745)
File not found
101shell>
Ejemplo operativo de docker + nutch
Crear un módulo (directorio) donde está la configuración y las instrucciones necesarias para crear una imagen de Docker con un Nutch configurado. El directorio se puede denominar nutch-docker y puede ser parecido a estos ejemplos: https://github.com/ckan/ckan-docker, https://github.com/sameersbn/docker-gitlab, https://github.com/sequenceiq/hadoop-docker o https://github.com/eugeneware/docker-wordpress-nginx
Integración de hadoop en el sistema
Conseguir introducir Hadoop dentro de docker y enlazarlo con nutch
Convertir en una aplicación Spring Boot
Se necesita
- Una clase Application
- Una o varias clases anotadas como Configuration en un paquete config
- Convertir en componentes el resto de las clases
- Adecuar los tests
(Iterac. 5) Integrar HDFS
- Pensar donde irá el sistema HDFS y cómo. Es decir, por ejemplo podría estar dentro del contendor docker (un sistema por cada contenedor) y ser ahí donde se va guardando la información sustituyendo los dumps que se estan creando ahora (también habría que cambiar la forma de extracción la información puesto que es te los dumps de donde se extrae la informacion para indexar). También por ejemplo podría ponerse fuera de los contendores y que los contenedores lo guarden ahí conectándose a él, y se indexaría en el servidor, si fuera así por ejemplo podría ser el servidor donde se almacenase el shell remote.
- Implementarlo
Crear un comando `info`
El comando info
está pensado para preguntar al sistema por cualquier información relevante. La más sencilla es preguntarle por el estado de un crawl. Debería responder si está parado o no.
Modificar los scripts actuales para poder realizar dichas configuraciones
Una vez se fijen las configuraciones a realizar, poder realizarlas a través de los scripts que manejan docker
Diagrama de arquitectura
Una vez se integre Spring remote shell realizar un diagrama de arquitectura basándose en este primer acercamiento y así también integrar hdfs en el diagrama
Pregutnar a Javier sobre cómo veía ese primer acercamiento. Feedback
Realizar una imagen Docker+nutch
Tener hecha una imagen docker con nutch con la que poder trabajar. Así más adelante se le añadirán a esta todas las mejoras
Crear la configuración básica de DOCKERFILE a partir del DSL
A partir de la tarea #14 crear un Builder
de configuración para Dockerfile y un adaptador del modelo neutral la Builder
(entrada: modelo neutral de crawler, salida: builder configurado o los ficheros de Docker). Notar que el objeto Builder
puede ser invocado por otros adaptadores (por ejemplo el de Nutch)
Creación Base de datos para el sistema web
Buscar que tipo de base de datos con persistencia donde almacenar los datos que el sistema vaya generando encaja mejor para esta primera version y crearl
Tareas configuración
Analizar varios proyectos realizados que utilicen Docker, tomarlos como inspiración y ejemplo para la realización del mío.
Crear nuevas operaciones
Crear nuevas operaciones básicas que vayan apareciendo según las necesidades, como listar DSL, listar Imágenes Docker, listar contenedores, con opciones de filtro
Crear el coordinador que crea todos los ficheros de configuración a partir del DSL
Crear en el DSL soporte para añadir un buscador local web sobre los resultados
Esto permite instalar en la imagen una herramienta para poder buscar sobre los resultados. Analizar si se puede configurar que durante la ejecución del crawler se produzca una indexación incremental de los dump, al final de la ejecución o bajo demanda.
Evaluar Diagramas
Diagramas butler
Diagramas Site
Revisar los diagramas y dar una opinón sobre ellos para poder mejorarlos o introducir más detalles
Añadir al tutorial pasos
- Eliminar el paso de extracción [deprecated]
- Indexar
- buscar
Scheduling order
Identificar deadlines para entregar el TFG
Hay que elegir en que banda de defensa se quiere defender el TFG y determinar cuales son las fechas claves con los entregables asociados para poderlo hacer.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.