Archivo de Junio, 2010

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: ,

CLR XXIV

Publicado el Junio 17, 2010 por Alonso Alvarez 
Archivado bajo Ideas de negocio, Innovación, Sociedad de la Información, Tecnologías, Tendencias

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

Limpieza de buffer. Una lista de alertas, noticias y artículos interesantes que corren el peligro de caer en el olvido:

La Cofa


Tags: , , , , , , , , , , , , , , , , , , , , ,

IPv4: Aforo completo

Publicado el Junio 8, 2010 por Jose María Rey 
Archivado bajo Futuro de Internet

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

Cada vez son más frecuentes las noticias que hacen referencia al próximo agotamiento del espacio de direcciones IPv4. De hecho, hay ya signos claros de que el asunto comienza a ser importante:

Así las cosas, la fecha en la que se asignará el último bloque en poder de IANA no puede establecerse con seguridad pero casi todas las fuentes la sitúan entre 2010 y 2011. Es cierto que esta fecha hace referencia al agotamiento del espacio de IANA y que los RIR tardarán algún tiempo más en agotar los bloques que les han sido asgnados pero en cualquier caso este segundo paso no dará mucho más tiempo.

¿Cómo se ha llegado a esta situación?. Un espacio de 32 bits permite más de 4000 millones de direcciones y sin embargo el espacio está a punto de agotarse. Al menos dos factores han llevado al rápido agotamiento del espacio de direcciones IPv4:

Un caso paradigmático del segundo escenario es el representado por el bloque de direcciones IPv4 que empiezan por 25 (25.0.0.0/8). Según IANA, este bloque está asignado al Ministerio de Defensa del Reino Unido desde 1995. Sin embargo, ese rango no está presente entre los anunciados en la tablas de BGP (ver figura siguiente), lo que significa que nadie fuera del citado organismo puede enviar a ese bloque de direcciones IP y que alguien usando una dirección en ese rango no puede acceder a Internet. De hecho, dado que ese rango está, en la práctica, en desuso, se han dado casos de operadores de telecomunicaciones que han usado ese rango para sus redes internas.

La siguiente figura muestra el estado del espacio IPv4: En azul la parte ocupada y en rojo las partes no incluidas en las tablas de encaminamiento (BGP). Fuente: Geoff Huston.


Estado del espacio de direcciones IPv4

Aunque en teoría los RIR podrían forzar la devolución de los bloques no usados, es poco probable que lo hagan debido a los problemas legales que podrían surgir y a que la devolución de estos bloques sólo retrasaría ligeramente el problema.

La solución que parece más adecuada es migrar de IPv4 a IPv6. No obstante, en Septiembre de 2009, Google anunció que sólo el 0,252% de los accesos a sus servidores ocurrían sobre IPv6 y que ese porcentaje incluye no sólo accesos IPv6 nativos sino también accesos a través de tecnologías de adaptación (por ejemplo, IPv6 tunelado en IPv4). La comunidad de usuarios no parece sentir todavía la urgencia del cambio pero los primeros pasos ya se están dando.


Tags: , ,