In questi anni, i Big Data sono uno dei trend informatici in più rapida espansione. I confini di ciò che ricade sotto tale espressione non sono nettamente
definiti. Vi si includono tutte le tecnologie che abbiano a che fare e facilitino l'elaborazione di grandi moli di dati, paraltro spesso molto eterogenei e destrutturati, raccolti a grandissima velocità. Anche R viene impiegato con successo in questo settore, e in questa lezione ne mostreremo uno dei possibili utilizzi. Cercheremo prima di capire dove si colloca R rispetto ai Big Data, per
poi vederlo al lavoro con Hadoop.
Collocazione di R nei Big Data
Per raggiungere il nostro scopo, può essere utile capire qual è l'utilità di R in questo scenario. Si consideri che i dati che entrano nel circuito dei Big Data vivono una sorta di ciclo di vita che li porta dall'essere acquisiti all'essere utilizzati. Sommariamente, possiamo individuare le seguenti
fasi di tale percorso:
- immagazzinamento: è la fase che inizia con la raccolta di dati. Non c'è limite alla natura delle fonti considerate accettabili: servizi web,
rilevatori e sensori hardware, flussi di dati testuali o binari, social network e via dicendo. Una volta raccolti, tali dati vengono accumulati
in strutture di persistenza idonee che possono essere DBMS relazionali o NoSQL, ma anche file system distribuiti come HDFS,
soluzione di Hadoop connotata da alta disponibilità e ridondanza; - organizzazione e gestione: in questo step appaiono una serie di strumenti dagli scopi più disparati che possono riguardare integrazione e completamento dei dati,
trasferimento e manipolazione, interrogazione e filtro. Solo per ricordare alcuni di essi, pensiamo a progetti come Hive,
Apache Tika e Sqoop; - analisi: questa fase sfrutta l'elaborazione dei dati disponibili per poter ricavare il maggior
numero di informazioni possibili. Proprio nell'analisi entra in gioco il linguaggio R, così come il framework MapReduce di Hadoop.
Lo scopo che qui ci prefiggiamo è proprio quello di valutare le possibili vie di analisi in cui R venga coinvolto in processi di MapReduce alimentati da moli di dati disponibili su HDFS.
Preparazione dell'ambiente
Per arrivare a far lavorare insieme R e Hadoop dobbiamo predisporre un ambiente che li contempli entrambi e che disponga di eventuali materiali di supporto.
Qualora non si fosse già introdotti all'uso di Hadoop, si consiglia di seguire la nostra guida:
in questa lezione essenzialmente riproporremo in R l'esempio che nella guida ad Hadoop è svolto in Java, concernente un contatore di parole presenti in un testo.
In dettaglio, ci servirà seguire questi passi:
- installazione di Hadoop che può essere effettuata sia su Linux
sia su Windows. Per i nostri test, abbiamo installato
l'ambiente su una macchina Linux con Ubuntu Server, usando nello specifico la versione 16.04. Compatibilmente con l'indicazione fornita nella guida, avremo a disposizione una variabile
di ambiente di nome HADOOP_HOME che indica la cartella di sistema in cui è stato scaricato il framework. Pertanto, le nostre direttive da riga di comando
avranno inizio proprio da questo path; - installazione di R sulla stessa macchina in cui abbiamo installato Hadoop. Nell'ambito dell'esempio non utilizzeremo la console interattiva ma
prepareremo degli script che per essere eseguiti utilizzeranno il comando Rscript, collocato - secondo la nostra installazione - in /usr/bin; - preparazione di file di testo da analizzare: trattandosi di un contatore di parole avremo bisogno di uno o più file sorgenti. In rete, sono
disponibili file molto grandi in formato testuale che possono fare al caso nostro, ma per poter verificare il risultato manualmente abbiamo preferito scrivere noi del testo in cui abbiamo ripetuto termini in quantità nota. - inserimento dei file di testo in una cartella di HDFS. Per fare ciò, sarà necessario prendere confidenza con la shell di HDFS.
Ricordiamo che i file su cui Hadoop lavorerà saranno sempre scelti tra le risorse di HDFS e non dal file system locale, pertanto tale passaggio di
copia dei file da analizzare è assolutamente fondamentale.
Tre modi per integrare R e Hadoop
Esistono tre modi per fare interagire R e Hadoop:
- Hadoop Streaming: sfrutta delle API che permettono di scrivere i programmi che eseguono map e reduce in qualsiasi linguaggio che possa interagire
con lo standard I/O. Si basa sull'uso di una libreria in formato .jar, hadoop-streaming, già inclusa nell'installazione di Hadoop: noi utilizzeremo proprio
questa tecnica nel nostro esempio, preparando tali script in R. Tra l'altro, questa modalità può essere utilizzata in molti altri linguaggi come, ad esempio, Python, anch'esso
impiegato spesso nell'ambito dei Big Data; - RHive è il package R che permette l'integrazione con Hive, il sistema di data warehousing collegato ad Hadoop che permette di interagire con i
dati mediante HQL (Hive SQL), un linguaggio di interrogazione simile a quello usato per i database relazionali; - RHadoop è un pacchetto composto da cinque estensioni per R che permette l'interazione
con ogni aspetto di Hadoop, tra cui i pacchetti rhdfs e rmr2 che offrono, rispettivamente, la connettività con il file system HDFS e con il framework di MapReduce.
Prossimi passi
Ora che abbiamo preparato l'ambiente e chiarito un pò il contesto in cui opereremo, possiamo passare a realizzare l'esempio. Nella prossima
lezione integreremo R nel processo di MapReduce implementato in Hadoop: l'infrastruttura di elaborazione verrà offerta dal framework mentre R sarà usato
per la realizzazione dei singoli script di map e di reduce.