El origen de Map y Reduce

Publicado el Junio 23, 2010 por Jose María Rey 
Archivado bajo Tecnologías

1 Malo2 Mejorable3 Normal4 Bueno5 Excelente (No valorado aún)
Loading ... Loading ...

A principios de este año se concedió a Google la patente de MapReduce, un método de procesamiento que, según Google, permite tratar gandes cantidades de información en entornos masivamente paralelos. El método se presta también a ser ejecutado en entornos de alta disponibilidad, donde una unidad de procesamiento puede ser reemplazada por otra en caso de fallo.

En esencia, el método consiste en distribuir la carga de trabajo entre un cierto numero de procesadores (los workers), cada uno de los cuales puede ejecutar una de estas tareas:

El aspecto que probablemente sea más relevante del entorno MapReduce es su alta configurabilidad:

Ambos pasos de procesamiento (map y reduce) están inspirados, como reconocen implícitamente los autores de la patente, en funciones que la programación funcional lleva usando desde hace mucho tiempo.

La programación funcional basa su modelo de funcionamiento casi exclusivamente en la composición de funciones y no hay casi estructuras de control (tales como bucles, propios de los lenguajes imperativos) por lo que el tratamiento de funciones debe ser necesariamente muy potente. Parte de esta potencia viene del hecho de que en programación funcional las funciones son un tipo de objetos como cualquier otro y por tanto pueden ser pasadas como argumento a otras funciones. Es verdad que ciertos lenguajes imperativos como C++ importaron esta característica pero la integración conseguida no es tan perfecta como en programación funcional.

En programación funcional, la función map realiza lo siguiente:

map(f,[a1,a2,...,an]) = [f(a1), f(a2), ..., f(an)]

Es decir, map recibe dos un argumentos: Una función unaria (f) una lista de datos sobre los que operar (los ai). La función map aplica f a cada uno de los elementos de la lista y retorna una lista con todos los valores resultantes. La potencia de map está precisamente en este argumento puesto que sin cambiar la definición de map se pueden hacer infinidad de cosas con una lista, simplemente definiendo una f adecuada.

El paralelismo entre el map funcional y el primero de los dos pasos de procesamiento de MapReduce resulta claro (se debe tener en cuenta que no hay problema en que la función f devuelva pares (etiqueta, valor)). La lista de valores recibida por map estaría compuesta por todos los elementos pertenecientes a una misma partición definida por el paso inicial de particionamiento.

El paso reduce resulta algo más complejo. En programación funcional, reduce (también conocida como fold) aplica una función binaria a los elementos de una lista pero en lugar de devolver un valor por cada valor de entrada, reduce acumula todas las aplicaciones para generar un único valor:

reduce(f,z, [a1, a2, ..., an])=f(f(…f(f(z, a1), a2), a3),…, an)

En la expresión anterior se ha presentado el caso del reduce que acumula a izquierdas (conocido como foldl) pero, por supuesto, se puede definir su versión que acumula a derechas (foldr). En Haskell, la función reduce a izquierdas se puede escribir como sigue:


reduce f z [] = z
reduce f z (x:xs) = reduce f (f z x) xs

La definición permite apreciar que z es una especie de elemento neutro que se devuelve cuando se recibe una lista de elementos vacía. La versatilidad de reduce es mucho mayor de lo que pueda parecer a primera vista. Por ejemplo:

donde (+) y (*) representan respectivante las funciones binarias que suman o multplican sus dos argumentos. Usando valores más complejos de f se pueden conseguir efectos tales como definir map en función de reduce.

En este caso, la correspondencia entre el reduce funcional y el segundo paso del entorno MapReduce no es tan cercana ya que en el entorno de Google la salida de un paso de reducción puede tener más de un valor mientras que la versión funcional devuelve un único valor y en el esquema MapReduce probablemente se puedan definir otros esquemas de uso de f pero en cualquier caso, la relación es clara.


Tags: ,

Tendencias en lenguajes de programación 2009

Publicado el Marzo 3, 2009 por Alonso Alvarez 
Archivado bajo Tecnologías, Tendencias

1 Malo2 Mejorable3 Normal4 Bueno5 Excelente (Votos: 1. Media: 4/5)
Loading ... Loading ...

Un año más, O’Reilly publica un pequeño estudio sobre el estado de la publicación de libros técnicos, lo que sirve para identificar también tendencias en cuanto a la popularidad y uso de determinadas tecnologías y lenguajes de programación.

Aunque en los últimos años ha permanecido relativamente estable (incluso con ligeros incrementos) el número de libros vendidos, al menos en Estados Unidos, y dentro de una evolución estacional parecida, con picos en Navidad y el inicio del curso, el último cuarto del año 2008 ha visto una reducción en el número de títulos vendidos, quizá como consecuencia de la crisis. Esto hace que al comparar las cifras entre 2007 y 2008 haya distorsiones en cuanto a la evolución que conviene tener en cuenta.

El siguiente gráfico muestra la evolución del mercado de libros sobre lenguajes de programación comparando 2007 con 2008:

El tamaño de cada caja se refiere al número de ejemplares vendido, y el color a la tendencia (verde creciente, rojo decreciente, negro neutro). Según este gráfico, y teniendo en cuenta la evolución final de 2008, se puede ver que:

Lógicamente, hay que tener presente que estos valores se refieren a libros vendidos, lo que excluye el acceso a información en formato electrónico sobre lenguajes de programación. No obstante, es un buen indicador de tendencias.

El estudio incluye también otros análisis, como el interés en tecnologías, examinando la venta de libros. Así, en Sistemas Operativos se destaca el crecimiento de Mac OS, el crecimiento de libros relacionados con blogs, o los relacionados con medios digitales.

Las fuentes de este análisis están en:

Además, se puede comparar con los datos anteriores en:


Tags: , , ,

Tendencias en lenguajes de programación en 2008

Publicado el Marzo 20, 2008 por Alonso Alvarez 
Archivado bajo Tecnologías, Tendencias

1 Malo2 Mejorable3 Normal4 Bueno5 Excelente (Votos: 1. Media: 3/5)
Loading ... Loading ...

Como cada año, en O’Reilly hacen un estudio del estado de la publicación de libros técnicos, lo que sirve para identificar también tendencias en cuanto a la popularidad y uso de determinadas tecnologías y lenguajes de programación.
Este gráfico muestra la evolución del mercado de libros sobre lenguajes de programación que, por cierto, ha caído ligeramente en el último año:

Evolución en la venta de libros sobre lenguajes de programación según O'Reilly

(en la imagen, el área representa la cantidad de libros vendidos, y el color la tendencia, siendo el verde creciente y el rojo decreciente)

Lo más destacado del estudio es el crecimiento moderado de lenguajes muy difundidos como C#, Ruby y Python, y el rápido crecimiento de otros menos conocidos como powershell, y actionscript. En el lado negativo, se constata el declive de Visual Basic, .NET y Perl. Por último, hay un fuerte estancamiento en la mayoría de los lenguajes más asentados como Java (que en realidad sigue una clara tendencia a la baja), Javascript, C/C++, PHP o SQL.

El estudio analiza también libros referidos a otras tecnologías, no sólo lenguajes. Aquí se puede destacar el fuerte crecimiento de todo lo relacionado con Windows Vista (esperable), “colaboración” (con Microsoft SharePoint como máximo exponente), Office (especialmente la versión 2007), y Cisco. En el otro extremo, los descensos más acusados están en libros sobre creación de páginas web, fotografía digital y programación Web.

Citando a:


Tags: , , , ,

CLR III: vaciando la lista de referencias

Publicado el Octubre 2, 2007 por Alonso Alvarez 
Archivado bajo Banda ancha, Futuro de Internet, Innovación, Movilidad, Tecnologías, Tendencias

1 Malo2 Mejorable3 Normal4 Bueno5 Excelente (No valorado aún)
Loading ... Loading ...

Periódico saneamiento de memoria. Una lista de artículos interesantes que corren el peligro de caer en el olvido:

Olvido

Tags: , , , , ,

Tendencias en lenguajes de programación

Publicado el Septiembre 24, 2007 por Alonso Alvarez 
Archivado bajo Tecnologías, Tendencias

1 Malo2 Mejorable3 Normal4 Bueno5 Excelente (Votos: 2. Media: 3.5/5)
Loading ... Loading ...

Encontrar fuentes de información fiables y objetivas sobre tendencias tecnológicas es siempre complicado. Cuando además se refieren a cuestiones como el uso de lenguajes de programación puede ser una tarea casi imposible. Hay fuentes parciales que pueden proporcionar una visión limitada para cada entorno como las descargas o las ventas, aunque no una comparativa general.
Una aproximación a la evolución del uso de lenguajes de programación puede extraerse de este gráfico contenido en un interesante informe de O’Reilly Radar:

Mercado de libros de lenguajes de programación

La editorial O’Reilly está publicando periódicamente un estudio con datos obtenidos de las cifras de ventas de libros en Estados Unidos, y parte de la idea de que las ventas de libros pueden ser un indicador de las tendencias tecnológicas: aquellas emergentes o en proceso de adopción aumentarían sus ventas, mientras que las maduras estarían asociadas a un declive en la cantidad de libros vendidos sobre esa temática.
El estudio, mucho más amplio, cubre además de lenguajes, sistemas operativos o aplicaciones de ofimática entre otras.
En el caso concreto de la gráfica anterior, que compara el primer cuarto de este año y el pasado, el mercado de venta de libros técnicos muestra un gran interés del público hacia Ruby, que crece un 105% a pesar de tener ya un porcentaje significativo de mercado, y Transact SQL. Otros lenguajes tienen un importante crecimiento como Actionscript o VBScript, pero el porcentaje de mercado es mucho menor. Hay también un moderado crecimiento en ventas de Javascript y Python. Las mayores caídas se dan en Visual Basic, Perl, VBA, C/C++, PHP y Java, todos por encima del 10%.
El mercado de este tipo de libros decayó, en general, casi un 10% con respecto al año anterior, y en un periodo que es de los más significativos en ventas.

Vía: O’Reilly Radar


Tags: , , ,

Visualizar los paradigmas de programación

Publicado el Agosto 22, 2007 por Alonso Alvarez 
Archivado bajo Tecnologías

1 Malo2 Mejorable3 Normal4 Bueno5 Excelente (No valorado aún)
Loading ... Loading ...

Paradigmas que no lenguajes. El mapa está en “Lambda the ultimate“, un blog sobre lenguajes de programación, y muestra los distintos paradigmas (declarativa, imperativa, funcional, …), sus relaciones, y coloca los lenguajes de programación más representativos cerca del paradigma que mejor los representa:
Paradigmas de programación

Vía: Google Reader Blog


Tags: , ,