Ultimamente ho impostato la compressione su un cluster. Gli altri post contengono link utili, ma il codice effettivo che si desidera ottenere per la compressione LZO è qui: https://github.com/kevinweil/hadoop-lzo.
È possibile, immediatamente, utilizzare la compressione GZIP, la compressione BZIP2 e Unix Compress. Basta caricare un file in uno di questi formati. Quando si utilizza il file come input per un lavoro, è necessario specificare che il file sia compresso e il CODEC corretto. Ecco un esempio per la compressione LZO.
-jobconf mapred.output.compress=true
-jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec
Perché sto facendo un intervento sulla compressione LZO? Il riferimento a cloudera article di Praveen si addice a questo. La compressione LZO è una compressione separabile (a differenza di GZIP, ad esempio). Ciò significa che un singolo file può essere suddiviso in blocchi da consegnare a un mappatore. Senza un file compresso separabile, un singolo mapper riceverà l'intero file. Ciò potrebbe causare la presenza di un numero insufficiente di mapper e di spostare troppi dati nella rete.
BZIP2 è anche divisibile. Ha anche una compressione più alta di LZO. Tuttavia, è molto lento. LZO ha un rapporto di compressione peggiore rispetto a GZIP. Tuttavia è ottimizzato per essere extremely fast. In effetti, può persino aumentare le prestazioni del tuo lavoro riducendo al minimo l'I/O del disco.
Ci vuole un po 'di lavoro da configurare, ed è un po' difficile da usare, ma ne vale la pena (la crittografia trasparente sarebbe eccezionale). Ancora una volta, i passaggi sono:
- Installa LZO e lzop (riga di comando)
- Installare hadoop-lzo
- Carica un file compresso con lzop.
- Indicizza il file come descritto da hadoop-lzo wiki (l'indice consente di suddividerlo).
- Eseguire il lavoro (con i parametri corretti mapred.output.compress e mapred.output.compression.code)
fai a sapere se l'opzione "dfs.image.compress" dovrebbe comprimere i file durante la memorizzazione? – spektom