Database
 sql >> Database >  >> RDS >> Database

Comprendere il sistema di input output di Hadoop

A differenza di qualsiasi sottosistema di I/O, Hadoop viene fornito con una serie di primitive. Queste considerazioni primitive, sebbene di natura generica, vanno anche con il sistema Hadoop IO con alcune connotazioni speciali ad esso, ovviamente. Hadoop si occupa di multi-terabyte di set di dati; una considerazione speciale su queste primitive darà un'idea di come Hadoop gestisce l'input e l'output dei dati. Questo articolo scorre rapidamente queste primitive per dare una prospettiva sul sistema di input output di Hadoop.

Integrità dei dati

Integrità dei dati significa che i dati devono rimanere accurati e coerenti durante tutte le operazioni di archiviazione, elaborazione e recupero. Per garantire che nessun dato venga perso o danneggiato durante la persistenza e l'elaborazione, Hadoop mantiene severi vincoli di integrità dei dati. Ogni operazione di lettura/scrittura avviene nei dischi, tanto più che la rete è soggetta a errori. E il volume di dati che Hadoop gestisce non fa che aggravare la situazione. Il solito modo per rilevare i dati corrotti è attraverso i checksum. Un checksum viene calcolato quando i dati entrano per la prima volta nel sistema e vengono inviati attraverso il canale durante il processo di recupero. L'estremità di recupero calcola nuovamente il checksum e corrisponde a quelli ricevuti. Se corrisponde esattamente, i dati ritenuti privi di errori, altrimenti contengono errori. Ma il problema è:cosa succede se il checksum inviato è danneggiato? Questo è altamente improbabile perché si tratta di un piccolo dato, ma non una possibilità innegabile. L'uso del giusto tipo di hardware come la memoria ECC può essere utilizzato per alleviare la situazione.

Questa è una semplice individuazione. Pertanto, per correggere l'errore, viene utilizzata un'altra tecnica, denominata CRC (Cyclic Redundancy Check).

Hadoop si spinge oltre e crea un checksum distinto per ogni 512 byte (predefiniti) di dati. Poiché CRC-32 è di soli 4 byte, l'overhead di archiviazione non è un problema. Tutti i dati che entrano nel sistema vengono verificati dai datanode prima di essere inoltrati per la memorizzazione o un'ulteriore elaborazione. I dati inviati alla pipeline del datanode vengono verificati tramite checksum e qualsiasi danneggiamento rilevato viene immediatamente notificato al client con ChecksumException . Anche il client letto dal datanode esegue lo stesso drill. I datanode mantengono un registro della verifica del checksum per tenere traccia del blocco verificato. Il registro viene aggiornato dal datanode alla ricezione di un segnale di successo della verifica del blocco dal client. Questo tipo di statistiche aiuta a tenere a bada i dischi danneggiati.

A parte questo, viene effettuata una verifica periodica sul block store con l'ausilio di DataBlockScanner in esecuzione insieme al thread del nodo dati in background. Ciò protegge i dati dal danneggiamento del supporto di archiviazione fisico.

Hadoop conserva una copia o repliche dei dati. Questo è specificamente utilizzato per recuperare i dati da una massiccia corruzione. Una volta che il client rileva un errore durante la lettura di un blocco, segnala immediatamente al datanode il blocco danneggiato dal namenode prima di lanciare ChecksumException . Il namenode quindi lo contrassegna come un blocco danneggiato e pianifica qualsiasi ulteriore riferimento al blocco nelle sue repliche. In questo modo, la replica viene mantenuta con altre repliche e il blocco danneggiato contrassegnato viene rimosso dal sistema.

Per ogni file creato in Hadoop LocalFileSystem , un file nascosto con lo stesso nome nella stessa directory con estensione ..crc è creato. Questo file mantiene il checksum di ogni blocco di dati (512 byte) nel file. La manutenzione dei metadati aiuta a rilevare gli errori di lettura prima di lanciare ChecksumException dal LocalFileSystem .

Compressione

Tenendo presente il volume di dati che Hadoop gestisce, la compressione non è un lusso ma un requisito. Ci sono molti ovvi vantaggi della compressione dei file giustamente utilizzata da Hadoop. Economizza i requisiti di archiviazione ed è una capacità indispensabile per accelerare la trasmissione dei dati sulla rete e sui dischi. Ci sono molti strumenti, tecniche e algoritmi comunemente usati da Hadoop. Molti di loro sono piuttosto popolari e sono stati utilizzati nella compressione di file nel corso dei secoli. Ad esempio, vengono spesso utilizzati gzip, bzip2, LZO, zip e così via.

Serializzazione

Il processo che trasforma gli oggetti strutturati in un flusso di byte è chiamato serializzazione . Ciò è specificamente richiesto per la trasmissione di dati sulla rete o per la persistenza dei dati grezzi sui dischi. Deserializzazione è solo il processo inverso, in cui un flusso di byte viene trasformato in un oggetto strutturato. Ciò è particolarmente richiesto per l'implementazione dell'oggetto dei byte grezzi. Pertanto, non sorprende che il calcolo distribuito lo utilizzi in un paio di aree distinte:comunicazione tra processi e persistenza dei dati.

Hadoop utilizza RPC (Remote Procedure Call) per attivare la comunicazione tra i processi tra i nodi. Pertanto, il protocollo RPC utilizza il processo di serializzazione e deserializzazione per eseguire il rendering di un messaggio nel flusso di byte e viceversa e lo invia attraverso la rete. Tuttavia, il processo deve essere sufficientemente compatto per utilizzare al meglio la larghezza di banda della rete, nonché veloce, interoperabile e flessibile per adattarsi agli aggiornamenti del protocollo nel tempo.

Hadoop ha un proprio formato di serializzazione compatto e veloce, Writables , che i programmi MapReduce utilizzano per generare chiavi e tipi di valore.

Struttura dei dati dei file

Esistono un paio di contenitori di alto livello che elaborano la struttura dei dati specializzata in Hadoop per contenere tipi speciali di dati. Ad esempio, per mantenere un registro binario, il SequenceFile container fornisce la struttura dati per rendere persistenti le coppie chiave-valore binarie. Possiamo quindi utilizzare la chiave, ad esempio un timestamp rappresentato da LongWritable e valore di Writable , che si riferisce alla quantità registrata.

C'è un altro contenitore, una derivazione ordinata di SequenceFile , chiamato MapFile . Fornisce un indice per comode ricerche per chiave.

Questi due contenitori sono interoperabili e possono essere convertiti l'uno nell'altro.

Conclusione

Questa è solo una rapida panoramica del sistema di input/output di Hadoop. Approfondiremo molti dettagli intricati negli articoli successivi. Non è molto difficile comprendere il sistema di input/output Hadoop se si ha una conoscenza di base dei sistemi I/O in generale. Hadoop ha semplicemente aggiunto un po' di energia in più per stare al passo con la sua natura distribuita che funziona su vasta scala di dati. Questo è tutto.

Riferimento

Bianco, Tom. Hadoop, La guida definitiva, 2009 . Pubblicazioni O'Reilly.