Giter Club home page Giter Club logo

101crawlersweb's People

Contributors

fjlopez avatar shathe avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

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.

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.

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

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.

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.

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.

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

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>

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

  1. 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.
  2. 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.

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)

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.