{"id":381,"date":"2016-06-24T14:25:13","date_gmt":"2016-06-24T19:25:13","guid":{"rendered":"http:\/\/itsoftware.com.co\/content\/?p=381"},"modified":"2022-12-05T11:37:51","modified_gmt":"2022-12-05T16:37:51","slug":"mapreduce-procesamiento-paralelo","status":"publish","type":"post","link":"https:\/\/itsoftware.com.co\/content\/mapreduce-procesamiento-paralelo\/","title":{"rendered":"\u00bfQu\u00e9 es MapReduce para procesamiento en paralelo?"},"content":{"rendered":"<p>\u00bfAlguna vez no nos hemos preguntado c\u00f3mo es que Google hace para traernos resultados de millones de sitios en internet, para mostrarnos sus resultados de b\u00fasqueda? Por esa raz\u00f3n vamos a hablar de <strong>MapReduce<\/strong>.<\/p>\n<figure id=\"attachment_2988\" aria-describedby=\"caption-attachment-2988\" style=\"width: 372px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/itsoftware.com.co\/content\/wp-content\/uploads\/2016\/06\/mapreduce_mapshuffle.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-2988\" src=\"https:\/\/itsoftware.com.co\/content\/wp-content\/uploads\/2016\/06\/mapreduce_mapshuffle-300x162.png\" alt=\"MapReduce\" width=\"372\" height=\"201\" \/><\/a><figcaption id=\"caption-attachment-2988\" class=\"wp-caption-text\">MapReduce<\/figcaption><\/figure>\n<p><!--more--><\/p>\n<p>Para poder manejar y procesar tal cantidad de informaci\u00f3n, se hizo necesario crear algoritmos que permitieran procesar millones de datos en forma distribuida en muchas m\u00e1quinas a la vez. \u00a0En vista de esta necesidad fue de donde naci\u00f3 <strong>MapReduce<\/strong>, conocido en Google como <strong>Hadoop<\/strong>.<\/p>\n<p><strong>MapReduce<\/strong> se puede realizar sobre un conjunto de datos en una red de servidores locales, o tambi\u00e9n sobre servidores geogr\u00e1ficamente distribuidos.<\/p>\n<p>En este esquema encontramos dos funciones principales: \u201c<strong>Map<\/strong>\u201d y \u201c<strong>Reduce<\/strong>\u201d. La funci\u00f3n <strong><em>map<\/em><\/strong> tiene como objetivo tomar un conjunto de datos para convertirlo en otro subconjunto, modelados en tuplas o \u201cpares\u201d (clave\/valor). Luego tenemos la funci\u00f3n <strong><em>reduce<\/em><\/strong>, que toma las salidas de <strong><em>map<\/em><\/strong> como sus entradas, combinando las tuplas de datos en un conjunto m\u00e1s peque\u00f1o de pares. La funci\u00f3n reduce siempre se realiza despu\u00e9s de la funci\u00f3n map.<\/p>\n<blockquote><p><em>Tambi\u00e9n te puede interesar\u00a0<a href=\"https:\/\/itsoftware.com.co\/content\/que-es-y-para-que-sirve-mysql\/\" rel=\"bookmark\">\u00bfQu\u00e9 es y para que sirve MySQL Database?<\/a><\/em><\/p><\/blockquote>\n<p>Para aclarar este embrollo, el siguiente ejemplo muestra c\u00f3mo funciona este algoritmo:<\/p>\n<p>Asumiendo que se tienen 5 archivos, y cada uno contiene dos columnas (una clave y un valor en t\u00e9rminos de Hadoop), una columna representa la ciudad y la otra su temperatura durante varias horas del d\u00eda.<\/p>\n<p>Este es un ejemplo de uno de dichos archivos:<\/p>\n<p>Bogot\u00e1, 15<\/p>\n<p>Cali, 32<\/p>\n<p>Medell\u00edn, 30<\/p>\n<p>Cartagena, 36<\/p>\n<p>Cartagena, 33<\/p>\n<p>Bogot\u00e1, 14<\/p>\n<p>\u2026<\/p>\n<p>Con estos datos que hemos recolectado, deseamos encontrar la m\u00e1xima temperatura para cada ciudad a partir de los 5 archivos. En cada archivo la ciudad y su temperatura aparecen muchas veces.<\/p>\n<p>Usando el esquema <strong><em>MapReduce<\/em><\/strong>, este trabajo se divide en 5 tareas <strong>map<\/strong>, donde cada \u201cmapper\u201d trabaja en uno de los cinco archivos, al final cada tarea <strong>map<\/strong> debe retornar la m\u00e1xima temperatura de cada ciudad, por cada archivo. Por ejemplo con los datos listados arriba, una funci\u00f3n <strong>map<\/strong> deber\u00eda retornar lo siguiente:<\/p>\n<p>(Bogot\u00e1, 15) (Medell\u00edn, 30) (Cartagena, 36)<\/p>\n<p>Asumiendo que las otras cuatro tareas <strong>map<\/strong> procesan sus cuatro archivos correspondientes, podr\u00edan retornar los siguientes resultados intermedios:<\/p>\n<p>(Bogot\u00e1, 18) (Medell\u00edn, 32) (Cartagena, 38) (Bogot\u00e1, 17) (Medell\u00edn, 34) (Cartagena, 39) (Bogot\u00e1, 13) (Medell\u00edn, 31) (Cartagena, 34) (Bogot\u00e1, 12) (Medell\u00edn, 36) (Cartagena, 37)<\/p>\n<p>Ahora todos los 5 resultados se deben ingresar en tareas \u201c<strong>reduce<\/strong>\u201d, las cuales combinan todos los resultados para obtener un solo valor por cada ciudad:<\/p>\n<p>(Bogot\u00e1, 18) (Medell\u00edn, 36) (Cartagena, 39)<\/p>\n<p>Una analog\u00eda de <strong>MapReduce<\/strong> puede ser la forma en la que se realizaba un censo en la antigua Roma. En este caso los organizadores del censo, enviaban personas a cada ciudad en el imperio. Cada empadronador en cada ciudad ten\u00eda la tarea de contar el n\u00famero de personas y retornar el resultado a la capital. En Roma, los resultados de cada ciudad se reduc\u00edan a un n\u00famero \u00fanico para determinar la poblaci\u00f3n total del imperio. \u00a0El mapeo de los empadronadores a las ciudades, que en paralelo retornan un resultado parcial, y la combinaci\u00f3n de dichos valores (<strong>reducing<\/strong>), es mucho m\u00e1s eficiente que enviar una sola persona a contar una a una a todos los habitantes del imperio.<\/p>\n<p><img decoding=\"async\" class=\"irc_mi iCstMZ3BkXKs-pQOPx8XEepE aligncenter\" src=\"https:\/\/www.novaroma.org\/vici\/images\/thumb\/Census_courtesy_of_Vroma.jpg\/360px-Census_courtesy_of_Vroma.jpg\" alt=\"\" width=\"360\" height=\"268\" \/><\/p>\n<p>Gracias a estas metodolog\u00edas, se pueden tomar datos de grandes y diversas fuentes, estructuradas o no, para obtener resultados de una manera m\u00e1s r\u00e1pida, aprovechando la distribuci\u00f3n del procesamiento de la informaci\u00f3n en multitud de m\u00e1quinas a la vez.<\/p>\n<p>Esto permite desde buscar en las millones de p\u00e1ginas web de internet, hacer an\u00e1lisis de miner\u00eda de datos en grandes bases de datos distribuidas, hacer c\u00e1lculos num\u00e9ricos en complejos experimentos cient\u00edficos, o cualquier tipo de an\u00e1lisis sobre trillones de archivos que actualmente se generan d\u00eda a d\u00eda en nuestro mundo digital.<\/p>\n<p>Art\u00edculo tomado como referencia de la p\u00e1gina principal de IBM.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfAlguna vez no nos hemos preguntado c\u00f3mo es que Google hace para traernos resultados de millones de sitios en internet, para mostrarnos sus resultados de b\u00fasqueda? Por esa raz\u00f3n vamos[&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[97,707],"tags":[712,376,708,320,976,711,710,709],"class_list":["post-381","post","type-post","status-publish","format-standard","hentry","category-bases-de-datos","category-big-data","tag-apache-hadoop","tag-bases-de-datos","tag-big-data","tag-data-mining","tag-empresas-de-desarrollo-de-software-bogota","tag-hadoop","tag-map-reduce","tag-mapreduce"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/posts\/381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/comments?post=381"}],"version-history":[{"count":0,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/posts\/381\/revisions"}],"wp:attachment":[{"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/media?parent=381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/categories?post=381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/tags?post=381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}