Sto costruendo un miglioramento del framework Spark (http://www.spark-project.org/). Spark è un progetto di UC Berkeley che MapReduce rapidamente nella RAM. Spark è costruito in Scala.Quale sarebbe una buona applicazione per una versione migliorata di MapReduce che condivide le informazioni tra i Mapper?
Il miglioramento che sto costruendo consente di condividere alcuni dati tra i mappatori mentre stanno calcolando. Questo può essere utile, ad esempio, se ognuno dei mappatori sta cercando una soluzione ottimale e tutti vogliono condividere la soluzione migliore corrente (per eliminare tempestivamente le soluzioni errate). La soluzione potrebbe essere leggermente obsoleta durante la propagazione, ma ciò dovrebbe comunque accelerare la soluzione. In generale, questo è chiamato l'approccio branch-and-bound.
Possiamo condividere numeri monotonicamente crescenti, ma anche condividere matrici e dizionari.
Stiamo anche esaminando applicazioni di apprendimento automatico in cui i mappatori descrivono le informazioni sul gradiente naturale locale, quindi una nuova migliore soluzione ottimale corrente viene condivisa tra tutti i nodi.
Quali sono alcune altre buone applicazioni del mondo reale di questo tipo di miglioramento? Quali tipi di applicazioni reali e utili potrebbero trarre beneficio da un calcolo di riduzione della mappa con solo un piccolo frammento di condivisione di informazioni tra i mapper. Quali applicazioni utilizzano MapReduce o Hadoop al momento ma sono solo un po 'troppo lente a causa della restrizione di indipendenza della fase Map?
Il vantaggio può essere quello di accelerare la fase della mappa o migliorare la soluzione.
Ho usato zookeeper per questo prima. –
C'è un recente documento di ricerca chiamato "Adaptive MapReduce che utilizza i rilevatori di situazione-aware" ([PDF] (http://www.edbt.org/Proceedings/2012-Berlin/papers/edbt/a45-vernica.pdf); [diapositive ] (https://www.ics.uci.edu/~rares/pub/edbt12-vernica-slides.pdf)) che descrive un sistema in cui i mappatori possono comunicare tra loro attraverso un negozio di meta-data distribuito (ZooKeeper). Questo è usato per implementare diverse ottimizzazioni adattive del runtime. –