2013-05-03 15 views
6

Se ho una directory con ~ 5000 piccoli file su S3, c'è un modo per comprimere facilmente l'intera directory e lasciare il file zip risultante su S3? Ho bisogno di farlo senza dover accedere manualmente ad ogni file.Zip un'intera directory su S3

Grazie!

+0

http://www.w2lessons.com/2012/01/fast-zipping-in-amazon-s3.html –

+0

l'ho visto, ma richiede comunque il download di ogni file individualmente su ec2, che è attualmente il collo di bottiglia – Jin

risposta

4

No, non esiste un proiettile magico.

(Per inciso, devi capire che non esiste una "directory" in S3: ci sono solo oggetti con percorsi. Puoi ottenere elenchi simili a directory, ma il carattere '/' non è " t magic - puoi ottenere prefissi di qualsiasi carattere tu voglia.)

Come qualcuno ha sottolineato, "pre-zippandoli" può aiutare sia a scaricare la velocità che a aggiungere velocità. (A spese dell'archiviazione duplicata.)

Se il download è il collo di bottiglia, sembra che il download sia in serie. S3 può supportare migliaia di connessioni simultanee allo stesso oggetto senza far fatica. Avrai bisogno di eseguire benchmark per vedere quante connessioni sono le migliori, dal momento che troppe connessioni da una casella potrebbero essere rallentate da S3. E potresti dover fare un po 'di TCP tuning quando fai 1000 di connessioni al secondo.

La "soluzione" dipende in gran parte dai modelli di accesso ai dati. Prova a ri-organizzare il problema. Se i download di file singoli non sono frequenti, potrebbe essere più logico raggrupparli 100 alla volta in S3, quindi suddividerli quando richiesto. Se si tratta di file di piccole dimensioni, potrebbe avere senso memorizzarli nella cache sul filesystem.

Oppure potrebbe avere senso memorizzare tutti i 5000 file come un grande file zip in S3 e utilizzare uno "smart client" in grado di scaricare intervalli specifici del file zip per servire i singoli file. (S3 supporta gli intervalli di byte, come ricordo).

+0

che vedo .. Questo è quello che pensavo. Il nostro collo di bottiglia è in realtà EMR che accede a S3 più e più volte per questi file. Abbiamo provato a usare 's3distcp' per copiare tutto ma è ancora follemente lento. Ripenserò la piattaforma e forse concateneremo tutti i file insieme e poi li invierò a S3 (probabilmente migliorerò anche le prestazioni di EMR) .. Grazie per l'intuizione! – Jin

+0

È una cosa così comune da fare. È un peccato che nessuno abbia ancora condiviso pubblicamente la propria soluzione e tutti devono reinventare la ruota. –

Problemi correlati