• Publicidad

Nueva herramienta para procesar la ingente cantidad de texto

¿Tienes algo interesante que decir? ¿O quizá algo no tan interesante? Aquí tenemos un espacio para compartir todo lo que queramos decir y que no cabe en ninguno de los otros foros.

Nueva herramienta para procesar la ingente cantidad de texto

Notapor explorer » 2014-12-02 18:02 @793

Nueva herramienta para procesar la ingente cantidad de textos de la web.

«Investigadores del centro CiTIUS de la Universidad de Santiago de Compostela han creado un software libre que acelera el procesamiento de textos y documentos publicados en la web. Su nombre es Perldoop, y permite el análisis de los datos de una forma más sencilla y eficiente.» Artículo

Esta gente ha desarrollado un programa que traduce programas escritos en Perl a Java, aumentando en doce veces la velocidad de procesamiento de textos.

El tema está en que es la herramienta Hadoop la que permite ejecutar programas escritos en otros lenguajes, y se dieron cuenta de que al hacerlo en Perl, aunque tenía una gran facilidad para trabajar con exp. reg., iba mucho más lento que haciéndolo en Java (?) así que se han currado esa herramienta.

Lo que me llama la atención es lo de que Java sea doce veces más rápido... algo no me cuadra.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14475
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Nueva herramienta para procesar la ingente cantidad de t

Notapor jmabuin » 2014-12-11 10:29 @478

Hola a todos.

Antes de nada, presentarme, soy uno de los autores de la herramienta. Por mi nombre de usuario se puede saber cuál :wink:

Si nos fijamos en el artículo, en concreto en la figura 5, se puede apreciar cómo en la versión secuencial, Java es 5.6 veces más rápida que la versión en Perl, pero eso no es de lo que trata la herramienta.

Lo que pretendemos es paralelizar aplicaciones escritas en Perl usando Hadoop. Me explico.

Hadoop incluye una herramienta llamada Hadoop Streaming, que lo que en realidad hace es, desde Java, lanzar un proceso externo que lee la entrada estándar (STDIN). Dicha entrada se encuentra distribuida entre los nodos de un cluster, y cada fragmento de dicha entrada será la entrada de uno de estos procesos (normalmente cada uno de estos procesos correrá en un núcleo de nuestro cluster). Cuando el proceso acaba, el resultado es devuelto a la aplicación Java.

La comunicación entre la aplicación Java y el proceso externo (en este caso escrito en Perl), tanto a la entrada como a la salida, se produce mediante pipes, y de esta comunicación es de donde viene la pérdida de rendimiento.

Como Hadoop está escrito y ejecuta aplicaciones en Java, permite "incrustar" directamente el código a paralelizar en una función denominada mapper o reducer y evitar estas comunicaciones, de ahí la ganancia de 12x, y no de la diferencia en el lenguaje de programación.

Lo que no nos hemos parado a investigar es por qué en la versión secuencial se observa dicha ganancia de 5.6x, ya que nuestra área de investigación se centra en el paralelismo. De todos modos estamos abiertos a opiniones :D

Espero haber aclarado en la medida de lo posible vuestras dudas.

¡Un saludo!
jmabuin
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2014-12-11 10:09 @465

Re: Nueva herramienta para procesar la ingente cantidad de t

Notapor explorer » 2014-12-18 11:51 @535

jmabuin escribiste:Hola a todos.
Bienvenido a los foros de Perl en Español, jmabuin.

jmabuin escribiste:La comunicación entre la aplicación Java y el proceso externo (en este caso escrito en Perl), tanto a la entrada como a la salida, se produce mediante pipes, y de esta comunicación es de donde viene la pérdida de rendimiento.
Entiendo. De esto hemos estado hablando en la lista de correo de Madrid.pm, y no quedaba claro el porqué. Se comentó si usabais o no alguno de los módulos que hay en CPAN relacionados con Hadoop, como es el caso de Hadoop::Streaming.

jmabuin escribiste:Lo que no nos hemos parado a investigar es por qué en la versión secuencial se observa dicha ganancia de 5.6x, ya que nuestra área de investigación se centra en el paralelismo.
La única idea que se nos ha ocurrido es el retraso que se produce en el momento del arranque de un proceso Perl (debido a que tiene que compilar el código fuente), ya que, luego en ejecución, las prestaciones deberían ser casi las mismas a medida de que el código se hace más largo (Java y Perl se basan en la ejecución de bytecode en una máquina virtual).

Pero... influyen muchas más cosas. Incluso cosas externas, como es el caso del sistema operativo (este programa se ejecutaba cien veces más rápido en Linux que en Windows). O incluso la forma en la que fue compilado (resumen: Red Hat compiló mal el intérprete de Perl, haciendo que algunos programas enlentecieran cien veces. Miles de empresas y proyectos afectados durante meses, hasta que a Red Hat le dio la gana distribuir una nueva versión).

jmabuin escribiste:De todos modos estamos abiertos a opiniones :D
Habría que mirarlo con más detalle... Un programa en Perl se puede mejorar en muchos aspectos, sobre todo en velocidad, si se arreglan las partes más lentas. Habría que analizar cada código en particular. Con la distribución Devel::NYTProf se pueden localizar esas partes.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14475
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Pasando el rato

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados