2012-02-06 7 views
7

Supponiamo che si stia utilizzando una dimensione di blocco predefinita (128 MB) e che ci sia un file che utilizza 130 MB; quindi utilizzando un blocco full size e un blocco con 2 MB. Quindi è necessario aggiungere 20 MB al file (il totale dovrebbe essere ora di 150 MB). Che succede?Come funziona HDFS con append

HDFS effettivamente ridimensiona le dimensioni dell'ultimo blocco da 2 MB a 22 MB? O creare un nuovo blocco?

In che modo l'accodamento a un file in HDFS si occupa della conquenza? Esiste il rischio di perdita di dati?

HDFS crea un terzo blocco inserisce i 20 + 2 MB in esso ed elimina il blocco con 2 MB. Se sì, come funziona in modo simultaneo?

risposta

3

Secondo il latest design document nel Jira issuementioned before, troviamo le seguenti risposte alla tua domanda:

  1. HDFS sarà aggiungere al l'ultimo blocco, non creare un nuovo blocco e copiare i dati dalla il vecchio ultimo blocco. Questo non è difficile perché HDFS utilizza solo un normale file system per scrivere questi file di blocco come normali file. I normali file system hanno meccanismi per l'aggiunta di nuovi dati. Ovviamente, se si riempie l'ultimo blocco, verrà creato un nuovo blocco.
  2. Solo una singola scrittura o aggiunta a qualsiasi file è consentita allo stesso tempo in HDFS, quindi non c'è concorrenza da gestire. Questo è gestito dal namenode. Devi chiudere un file se vuoi che qualcun altro inizi a scriverci.
  3. Se l'ultimo blocco di un file non viene replicato, l'append non funzionerà. L'append è scritta su una singola replica, che la pipeline alle repliche, simile a una normale scrittura. A me sembra che non ci sia alcun rischio aggiuntivo di dataloss rispetto ad una normale scrittura.
+0

Si può aggiungere a un file chiuso? – David

+0

se si chiama append su un file lo si sta aprendo. non puoi chiamare append su un file aperto. quindi, una volta che si chiama append e si ottiene un flusso di output, è possibile avviare il dumping dei byte alla fine del file. – EthanP

+0

Se ricordo correttamente quando è stata introdotta questa funzione, è necessario lasciare un file appena creato aperto per poterlo "aggiungere" ad esso (ovvero non una vera append). Stai dicendo che ora HDFS consente di 1) creare un file 2) chiuderlo 3) riaprirlo 4) aggiungere i dati ad esso? – David

1

Hadoop Distributed File System supporta gli allegati ai file e in questo caso deve aggiungere i 20 MB al secondo blocco nell'esempio (quello con inizialmente 2 MB). In questo modo finirai con due blocchi, uno con 128 MB e uno con 22 MB.

This è il riferimento all'aggiunta di documenti java per HDFS.

+4

Capisco che il percorso rimane lo stesso. Ma dal momento che i blocchi sono scritti una volta, immagino che l'HDFS creerebbe un terzo blocco inserendo i 20 + 2 MB in esso e cancellerà il blocco con 2 MB. Ma come funziona in modo simultaneo? – David

3

Questo è un articolo completo design document su append e contiene problemi di concorrenza.

L'attuale HDFS docs fornisce un collegamento a tale documento, quindi possiamo supporre che sia il recente. (La data del documento è il 2009)

E il relativo issue.