2015-09-03 18 views
9

In base a questo Cloudera post, Snappy IS è divisibile.Snappy è divisibile o non splittabile?

Per MapReduce, se i dati compressi sono divisibili, i formati BZip2, LZO e Snappy sono divisibili, ma GZip no. La splittability non è rilevante per i dati HBase.

Ma dalla guida definitiva di hadoop, Snappy NON è divisibile. enter image description here

Ci sono anche alcune informazioni confilitcting sul web. Alcuni dicono che è divisibile, altri dicono che non lo è.

+1

provalo allora? –

+0

Notato la stessa cosa, è interessante notare che Cloudera è SBAGLIATO. – noego

+0

cambiano i documenti http://www.cloudera.com/documentation/enterprise/latest/topics/admin_data_compression_performance.html quindi è divisibile ma solo con i formati contenitore – mishkin

risposta

12

Entrambi sono corretti ma in diversi livelli.

Secondo con Cloudera blog http://blog.cloudera.com/blog/2011/09/snappy-and-hadoop/

Una cosa da notare è che Snappy è destinato ad essere utilizzato con un formato
contenitore, come file di sequenze o file di dati Avro, invece di essere utilizzato direttamente su testo semplice, ad esempio, poiché quest'ultimo non è divisibile e non può essere elaborato in parallelo utilizzando MapReduce. Questo è diverso da LZO, dove è possibile indicizzare i file compressi LZO per determinare i punti di divisione in modo che i file LZO possano essere elaborati in modo efficiente nell'elaborazione successiva.

Ciò significa che se un file di testo intero è compresso con Snappy allora il file NON è scindibile. Ma se ogni record all'interno del file viene compresso con Snappy, il file potrebbe essere splittato, ad esempio nei file di sequenza con compressione a blocchi.

Per essere più chiari, non è lo stesso:

<START-FILE> 
    <START-SNAPPY-BLOCK> 
    FULL CONTENT 
    <END-SNAPPY-BLOCK> 
<END-FILE> 

di

<START-FILE> 
    <START-SNAPPY-BLOCK1> 
    RECORD1 
    <END-SNAPPY-BLOCK1> 
    <START-SNAPPY-BLOCK2> 
    RECORD2 
    <END-SNAPPY-BLOCK2> 
    <START-SNAPPY-BLOCK3> 
    RECORD3 
    <END-SNAPPY-BLOCK3> 
<END-FILE> 

blocchi Snappy sono NON scindibile ma i file con blocchi scattanti sono splittables.

2

Tutti i codec splittabili in hadoop devono implementare org.apache.hadoop.io.compress.SplittableCompressionCodec. Guardando il codice sorgente di hadoop a partire da 2.7, vediamo che org.apache.hadoop.io.compress.SnappyCodec non implementa questa interfaccia, quindi sappiamo che non è divisibile.