Apache Hadoop – Introduzione al software per il bigdata

Hadoop è una tecnologia promettente, in rapida evoluzione ed ormai talmente diffusa da essere costantemente associata al concetto di bigdata. Questa serie di articoli si propone di introdurre, analizzare e provare sul campo Hadoop!

Deep_Thought_by_Splapp_me_do

Intro

Per calcolare la risposta alla domanda fondamentale sulla vita, l’universo e tutto quanto un gruppo di scienziati – nella fortunatissima serie di Duglas Addams “Guida Galattica Per Autostoppisti – un gruppo di scienziati ha costruito un supercalcolatore, Pensiero Profondo (Deep Thought) che ha impiegato sette milioni e mezzo di anni, con un risultato abbastanza deludente: 42.

« “Quarantadue!” urlò Loonquawl. “Questo è tutto ciò che sai dire dopo un lavoro di sette milioni e mezzo di anni?”

“Ho controllato molto approfonditamente,” disse il computer, “e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda.” »

Oggi l’approcio sarebbe un po’ diverso.

Possiamo approciarci all’elaborazione di una quantitá di dati che aumentano in continuazione in due metodi differenti: acquistare un calcolatore sempre piú potente fino ad arrivare a Pensiero Profondo, oppure possiamo distribuire il lavoro su piú macchine. É la tecnica che ha introdotto Google per indicizzare il web.

I datacenter di Google sono estremamente modulari, i server sono visti come “mattoncini” indipendenti di un complesso sistema che distribuisce il calcolo con un design pattern chiamato “MapReduce” su cui si basa Apache Hadoop.

Apache Hadoop é un progetto per il calcolo di big data fortemente sviluppato da Yahoo! e usato da molti big companies di internet tra cui Facebook, Ebay, LinkedIn, Twitter.

MapReduce

MapReduce é un design pattern, una soluzione progettuale generale ad un problema ricorrente. In questo caso abbiamo due macro-passaggi (Map e Reduce) coadiuvati da altri due passaggi.

  • Viene scritto un software che risolva il nostro problema su una piccola porzione di dati in tempi ragionevoli e lo distribuiamo su tutte le macchine.
  • Map: dividiamo l’input di grosse dimensioni tra le macchine
  • Le tante macchine devono elaborare piccole porzioni di dati, quindi i tempi di elaborazione saranno quindi ragionevoli.
  • Reduce: raccogliamo i tanti risultati intermedi e li “riduciamo” ad un unico risultato

L’elaborazione della soluzione deve poter ovviamente essere divisa tra le macchine del cluster porzionando l’input.

Indicizziamo internet

Facciamo un esempio concreto, il problema per cui é nato questo design pattern: indicizzare internet.

Scrivere un software che legga dei file di testo html e ne estragga le parole chiave é semplice. Il secondo passo sará scaricare tutte le pagine html dal web: difficile, ma con una buona connessione (e Google cel’ha) ce la possiamo fare. Distribuiamo software e pagine html tra le tante macchine del cluster (fase “map“) e lanciamo l’elaborazione. Ora possiamo raccogliere gli output di tutte le elaborazioni ed inserirli in un Data Base (fase “reduce“).

To be continued…

Nei prossimi articoli vedremo l’architettura di Apache Hadoop, l’installazione su singolo nodo, molto utile per testare il software che scriviamo, inizieremo ad usarlo con un codice di esempio e passeremo all’installazione di un vero e proprio sistema multinodo su cui elaborare una gran massa di dati.

Stay Tuned!

Image Credits:Deep Thought by Splapp-me-do.

Tags: , ,