2011-09-19 19 views
7

Quando ho messo un file in HDFS, ad esempioHDFS crittografa o comprime i dati durante l'archiviazione?

$ ./bin/hadoop/dfs -put /source/file input 
  • è il file compresso durante la memorizzazione?
  • Il file è crittografato durante la memorizzazione? Esiste un'impostazione di configurazione che possiamo specificare per cambiare se è crittografato o no?
+0

fai a sapere se l'opzione "dfs.image.compress" dovrebbe comprimere i file durante la memorizzazione? – spektom

risposta

8

There non è una compressione implicita in HDFS. In altre parole, se vuoi che i tuoi dati siano compressi, devi scriverlo in questo modo. Se si pianifica di scrivere la mappa ridurre i lavori per elaborare i dati compressi, si vorrà utilizzare un formato di compressione separabile.

Hadoop può elaborare file compressi e qui è un bel article su di esso. Inoltre, l'uscita MR intermedia e finale può essere compressed.

C'è un JIRA in "Trasparenza trasparente in HDFS", ma non vedo molti progressi su di esso.

Non penso che ci sia un'API separata per la crittografia, anche se è possibile utilizzare anche un codec di compressione per la crittografia/decrittografia. Here sono ulteriori dettagli su crittografia e HDFS.

-1

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:

  1. Installa LZO e lzop (riga di comando)
  2. Installare hadoop-lzo
  3. Carica un file compresso con lzop.
  4. Indicizza il file come descritto da hadoop-lzo wiki (l'indice consente di suddividerlo).
  5. Eseguire il lavoro (con i parametri corretti mapred.output.compress e mapred.output.compression.code)
+0

La query originale era "dfs put" comprime e crittografa in modo trasparente il file. Non era in alcun modo collegato a MR. HDFS può essere usato per altre cose. Con il revamping MR che viene fornito con la versione 0.23 di Hadoop, altri framework possono essere facilmente inseriti in Hadoop. –