venerdì 22 novembre 2013

Hadoop: di cosa si tratta ?

File:Hadoop logo.svg

Cos'è Hadoop ?


La crescita impressionante dei dati osservata negli ultimi anni, e destinata a proseguire nel futuro, ha fatto nascere molti progetti indirizzati a trovare delle soluzioni il più possibile semplici ed economiche per:

  1. Archiviare le informazioni
  2. Eseguire delle elaborazioni su moli di dati fino a poco tempo fa impensabili (decine di Petabytes e più). 

Poiché la gran parte delle informazioni oggi generate è di tipo non strutturato (files), è in questa direzione che molti dei progetti si sono mossi e tra questi anche Hadoop.

Hadoop nasce come progetto per l'analisi distribuita di grandi insiemi di dati attraverso un semplice modello di programmazione.  L'architettura, realizzata in Java, permette di poter scalare da pochi server fino a migliaia di sistemi: ogni server contribuisce con le proprie risorse di calcolo e la propria capacità di memorizzare i dati, e quindi aggiungendo server, chiamati anche "nodi", è possibile far crescere un sistema Hadoop in modo quasi lineare. Benché non vi siano restrizioni specifiche per i nodi, di norma vengono utilizzati dei sistemi x86 standard, il che permette di poter tenere sotto controllo i costi complessivi della soluzione e allo stesso tempo di beneficiare della crescita in termini computazionali di queste architetture.

L'alta affidabilità, e dunque la protezione dei dati, viene realizzata non basandosi sulle caratteristiche hardware dei server, ma bensì a livello software: sono le librerie di Hadoop che si occupano di identificare se e quali componenti presentano un malfunzionamento, ed intervenendo per ripristinare le operazioni (ad esempio creando una nuova copia dei dati contenuti in un server). E' evidente che nella scala dei Petabytes le soluzioni di backup tradizionali non sono utilizzabili, e quindi è proprio la distribuzione dei dati su nodi differenti la chiave per salvaguardare le informazioni anche di fronte ad un guasto di uno dei nodi (Hadoop adotta come standard la scrittura dello stesso dato in tre locazioni differenti).

Le due componenti fondamentali di Hadoop sono quindi
  • Il sistema di gestione distribuita dei dati: l'Hadoop Distributed File System (HDFS)
  • Il sistema di elaborazione parallela dei dati: MapReduce
A fianco a queste componenti fondamentali si trovano altri moduli che aggiungono ulteriori funzionalità alla piattaforma: citiamo a titolo di esempio HBase,  un database distribuito per la gestione strutturata di dati sotto forma di tabelle di grandi dimensioni, e Hive, un modulo pensato per il datawarehousing che rende possibile interagire con i dati di Hadoop con un interfaccia SQL-like. I moduli addizionali si collocano "sopra" HDFS e MapReduce, che sono sempre presenti come fondamenta dell'architettura: ecco quindi che i dati strutturati di HBase sono memorizzati come files in HDFS e le query SQL di Hive sono eseguite da MapReduce.



Origini del progetto e diffusione attuale

Hadoop nasce come progetto Apache, e quindi come open source, ispirato dalla soluzione MapReduce di Google e dal Google File System. Il maggiore contributore al progetto è Yahoo, che ne fa un uso massiccio al proprio interno: tra le più importanti realtà che oggi fanno uso di Hadoop possiamo citare AOL, Ebay, Facebook, Linkedin e Twitter.

Hadoop è ormai riconosciuto come una delle più promettenti soluzioni general-purpose per i Big Data, capace di memorizzare grandi quantitò di dati e fornire una semplice ma potente piattaforma di analisi: numerose distribuzioni di Hadoop sono oggi messe a disposizione dei clienti da aziende storiche dell'IT quali EMC, IBM e Microsoft, oltre che da realtà specializzate sulle tecnologie Hadoop quali Cloudera.

Hadoop Distributed File System (HDFS): quali differenze rispetto ai File System tradizionali?

L'Hadoop Distributed File System è stato disegnato con l'obiettivo principale di poter memorizzare enormi quantità di dati distribuendone il contenuto su una rete di server realizzati con hardware standard di mercato (x86).

Rispetto ai file system general purpose quali NFS o CIFS, HDFS è costruito attorno all'idea di un utilizzo dei dati in modalità write-once, read-many. Questo ovviamente non significa che i dati non possano essere modificati, ma indica un approccio differente all'utilizzo dei dati stessi: come è tipico del mondo Big Data, non ci si aspetta di accedere in modo chirurgico ad un singolo file o ad una porzione di questo, ma piuttosto è previsto che le analisi operino su una gran parte dei dati memorizzati (se non tutti). La possibilità di poter accedere in modo efficiente a tutti i dati e non solo ad una porzione è in effetti una delle chiavi di volta dei Big Data.

L'HDFS è stato pensato per operazioni che attraversino una porzione importante dei dati disponibili, con un focus sulla scalabilità di questo percorso di accesso: profili di accesso ai dati sensibili alla latenza (qualche millisecondo) non sono adatti ad essere ospitati in un HDFS. In altre parole, se le vostre applicazioni richiedono di accedere a file in tempi molto ridotti, HDFS non è la scelta adatta.

Un secondo aspetto da considerare è la dimensione dei file stessi: HDFS è particolarmente efficiente nella memorizzazione di files di grandi dimensioni (da pochi MB ai TB) ma non è una soluzioni ottimale se si deve operare con un altissimo numero di file di piccole dimensioni (a titolo di esempio, i filesystems tradizionali utilizzano blocchi da 512 bytes, mentre HDFS utilizza di default un blocco di 64MB).

Un terzo aspetto importante riguarda l'operatività: di norma i file memorizzati su filesystem tradizionali sono gestiti con comandi quali "ls", "cp", "rm" (nel mondo Windows "DIR", "COPY", "DEL"): nel caso di HDFS questo non è di norma possibile in quanto il file system Hadoop non viene presentato ai server sotto forma di directory ("/var/filesystem1") o di disco di rete ("L:"); l'interazione con HDFS avviene difatti attraverso una linea di comando speciale del tipo:

> hdfs dfs <argomenti>

La linea di comando mette a disposizione i comandi di gestione dei file, che fortunatamente sono molto simili alla loro controparte Unix.

I file in un HDFS sono indirizzati nella forma seguente (URI):

hdfs://nome/path 

Copiare un file locale in un HDFS avviene quindi eseguendo un comando simile al seguente:

> hdfs dfs -put fileLocale.txt hdfs://myHadoop.esempio.com/hadoop/hadoopfile.txt 

L'interazione con HDFS quindi è sempre mediata da comandi "speciali": essendo Hadoop scritto in Java, tutte le interazioni con i filesystem Hadoop avvengono mediante le API Java.

Soluzioni EMC per Hadoop


Isilon

La piattaforma Isilon è la soluzione NAS scale-out di EMC, capace di gestire enormi quantità di dati (fino a 15PB, anche in un singolo filesystem!) e caratterizzata da un sistema semplificato di storage management progettato per essere facile da utilizzare anche di fronte ad ambienti molto grandi.
L'architettura scale-out di Isilon permette di realizzare una soluzione Hadoop con caratteristiche uniche:

  • Accesso multi-protocollo ai dati (NFS, SMB, FTP e HTTP in aggiunta a HDFS)
  • Protezione dei dati granulare e implicita nella piattaforma
  • Rapida installazione del cluster Hadoop e facile scalabilità 
  • Eliminazione dei Single Point of Failure di Hadoop (singolo NameNode)
  • Utilizzo di funzioni di replica (Fast Snapshots) per la protezione dei dati
Maggiori informazioni sulla piattaforma Isilon le potete trovare nella pagina italiana di EMC dedicata a questa soluzione.

Pivotal Hadoop.

Pivotal offre una serie di distribuzioni di Apache Hadoop enterprise-ready e sotto il completo supporto di EMC (24x7 in ogni parte del  mondo): queste soluzioni sono state disegnate per operare con gli ambienti SQL esistenti, supportare le moderne architetture di data lakes e coesistere con sistemi ad altissime prestazioni quali gli in-memory database per l'esecuzione simultanea di interrogazioni analitiche in real-time e batch.

Maggiori informazioni sui prodotti Pivotal potete trovarli nella pagina web ad essi dedicata.

GZ




Nessun commento:

Posta un commento