Video: How To Compress Large Video Files On Mac Without Losing Video Quality 2024
Gli enormi volumi di dati che sono realtà in una tipica implementazione Hadoop rendono la compressione una necessità. La compressione dei dati ti consente di risparmiare molto spazio di archiviazione ed è sicuro di accelerare il movimento di tali dati in tutto il cluster. Non sorprende che un certo numero di schemi di compressione disponibili, chiamati codec, sono disponibili per te.
In una distribuzione Hadoop, si ha a che fare (potenzialmente) con un numero piuttosto elevato di singoli nodi slave, ognuno dei quali ha un numero di grandi unità disco. Non è raro che un singolo nodo slave abbia fino a 45 TB di spazio di archiviazione raw disponibile per HDFS.
Anche se i nodi slave Hadoop sono progettati per essere economici, non sono gratuiti e con grandi volumi di dati che tendono a crescere a tassi crescenti, la compressione è uno strumento ovvio per il controllo estremo volumi di dati.
In primo luogo, alcuni termini di base: un codec, che è una forma abbreviata di co mpressor / dec omprote, è tecnologia (software o hardware, o entrambi) per la compressione e la decompressione dei dati; è l'implementazione di un algoritmo di compressione / decompressione.
È necessario sapere che alcuni codec supportano qualcosa chiamato compressione splittabile e che i codec differiscono sia nella velocità con cui possono comprimere e decomprimere i dati sia nel grado in cui possono comprimerli.
La compressione separabile è un concetto importante in un contesto Hadoop. Il modo in cui Hadoop funziona è che i file vengono divisi se sono più grandi dell'impostazione della dimensione del blocco del file e le singole suddivisioni di file possono essere elaborate in parallelo da diversi mapper.
Con la maggior parte dei codec, le divisioni dei file di testo non possono essere decompresse indipendentemente dalle altre divisioni dallo stesso file, quindi i codec non sono divisibili, quindi l'elaborazione di MapReduce è limitata a un singolo mapper.
Poiché il file può essere decompresso solo nel suo complesso, e non come singole parti basate su divisioni, non può esserci un'elaborazione parallela di tale file e le prestazioni potrebbero subire un enorme successo mentre un lavoro attende un singolo mapper elaborare più blocchi di dati che non possono essere decompressi in modo indipendente.
La compressione separabile è solo un fattore per i file di testo. Per i file binari, i codec di compressione Hadoop comprimono i dati all'interno di un contenitore con codifica binaria, a seconda del tipo di file (ad esempio, SequenceFile, Avro o ProtocolBuffer).
A proposito di prestazioni, c'è un costo (in termini di risorse e tempo di elaborazione) associato alla compressione dei dati che vengono scritti nel tuo cluster Hadoop.
Con i computer, come con la vita, nulla è gratuito. Durante la compressione dei dati, stai scambiando cicli di elaborazione per lo spazio su disco. E quando questi dati vengono letti, c'è anche un costo associato alla decompressione dei dati. Assicurati di soppesare i vantaggi dei risparmi di archiviazione rispetto alle spese generali aggiuntive.
Se il file di input di un processo MapReduce contiene dati compressi, il tempo necessario per leggere i dati da HDFS viene ridotto e le prestazioni del lavoro vengono migliorate. I dati di input vengono decompressi automaticamente quando vengono letti da MapReduce.
L'estensione del nome file in ingresso determina quale codec supportato viene utilizzato per decomprimere automaticamente i dati. Ad esempio, a. estensione gz identifica il file come un file compresso con gzip.
Può anche essere utile per comprimere l'output intermedio della fase mappa nel flusso di elaborazione MapReduce. Poiché l'output della funzione mappa viene scritto su disco e inviato attraverso la rete per ridurre le attività, la compressione dell'output può comportare significativi miglioramenti delle prestazioni.
E se si desidera archiviare l'output MapReduce come file di cronologia per uso futuro, la compressione di questi dati può ridurre significativamente la quantità di spazio necessario in HDFS.
Esistono molti algoritmi e strumenti di compressione diversi e le loro caratteristiche e punti di forza variano. Il trade-off più comune è tra i rapporti di compressione (il grado in cui un file è compresso) e comprime / decomprime velocità. Il framework Hadoop supporta diversi codec. Il framework comprime e decomprime in modo trasparente la maggior parte dei formati di file di input e output.
Il seguente elenco identifica alcuni codec comuni supportati dal framework Hadoop. Assicurati di scegliere il codec più adatto alle esigenze del tuo caso d'uso particolare (ad esempio, con carichi di lavoro in cui la velocità di elaborazione è importante, scegli un codec con elevate velocità di decompressione):
-
Gzip: Una compressione utility che è stata adottata dal progetto GNU, Gzip (abbreviazione di GNU zip) genera file compressi con a. estensione gz. È possibile utilizzare il comando gunzip per decomprimere i file creati da un numero di utilità di compressione, incluso Gzip.
-
Bzip2: Dal punto di vista dell'usabilità, Bzip2 e Gzip sono simili. Bzip2 genera un rapporto di compressione migliore rispetto a Gzip, ma è molto più lento. Infatti, tra tutti i codec di compressione disponibili in Hadoop, Bzip2 è di gran lunga il più lento.
Se stai creando un archivio che raramente avrai bisogno di interrogare e lo spazio è ad un alto livello, allora forse Bzip2 meriterà di essere preso in considerazione.
-
Snappy: Il codec Snappy di Google offre modesti rapporti di compressione, ma velocità di compressione e decompressione veloci. (In effetti, ha le più rapide velocità di decompressione, il che rende altamente desiderabile per i set di dati che è probabile che vengano interrogati spesso.)
Il codec Snappy è integrato in Hadoop Common, un insieme di utilità comuni che supporta altri sottoprogetti Hadoop. Puoi usare Snappy come componente aggiuntivo per le versioni più recenti di Hadoop che non forniscono ancora il supporto per il codec Snappy.
-
LZO: Simile a Snappy, LZO (abbreviazione di Lempel-Ziv-Oberhumer, il trio di informatici che ha elaborato l'algoritmo) fornisce rapporti di compressione modesti, ma velocità di compressione e decompressione veloci. LZO è concesso sotto licenza GNU Public License (GPL).
LZO supporta la compressione separabile, che consente l'elaborazione parallela di suddivisioni di file di testo compressi da parte dei lavori MapReduce. LZO ha bisogno di creare un indice quando comprime un file, perché con i blocchi di compressione a lunghezza variabile, è necessario un indice per dire al mappatore dove può dividere in sicurezza il file compresso. LZO è davvero desiderabile solo se hai bisogno di comprimere i file di testo.
Codec | File Extension | Splittable? | Grado di compressione | Velocità di compressione |
---|---|---|---|---|
Gzip | . gz | No | medio | medio |
Bzip2 | . bz2 | Si | Alta | lento |
Snappy | . scattanti | No | medio | Veloce |
LZO | . lzo | No, a meno che indicizzato | Medio | Veloce |
Tutti gli algoritmi di compressione devono compensare il grado di compressione e la velocità di compressione che possono raggiungere. I codec elencati sono in grado di controllare il bilanciamento tra il rapporto di compressione e la velocità al momento della compressione.
Ad esempio, Gzip consente di regolare la velocità di compressione specificando un numero intero negativo (o una parola chiave), dove -1 indica il livello di compressione più veloce e -9 indica il livello di compressione più lento. Il livello di compressione predefinito è -6.