2011-10-11 28 views
10

Mi chiedo se sia possibile cat un file gzip memorizzato su Amazon s3. Forse usando qualche client di streaming. Cosa ne pensi?zcat su amazon s3

Siamo Ricerchiamo per un'operazione simile a zcat s3://bucket_name/your_file | grep "log_id"

risposta

4

Non exaclty uno zcat, ma un modo per utilizzare Hadoop per scaricare file di grandi dimensioni in parallelo da S3 potrebbe essere http://hadoop.apache.org/common/docs/current/distcp.html

Hadoop distcp S3: // YOUR_BUCKET/your_file/tmp/your_file

o

Hadoop distcp S3: // YOUR_BUCKET/HDFS your_file: // maestro: 8020/your_file

Forse da questo punto è possibile reindirizzare uno zcat ...

Per aggiungere le credenziali si deve modificare il file core-site.xml con:

<configuration> 
<property> 
    <name>fs.s3.awsAccessKeyId</name> 
    <value>YOUR_KEY</value> 
</property> 
<property> 
    <name>fs.s3.awsSecretAccessKey</name> 
    <value>YOUR_KEY</value> 
</property> 
<property> 
    <name>fs.s3n.awsAccessKeyId</name> 
    <value>YOUR_KEY</value> 
</property> 
<property> 
    <name>fs.s3n.awsSecretAccessKey</name> 
    <value>YOUR_KEY</value> 
</property> 
</configuration> 
6

Si potrebbe anche usare s3cat, parte di Tim toolkit della riga di comando di Kay per AWS:

http://timkay.com/aws/

per ottenere l'equivalente di zcat FILENAME | grep "log_id", si farebbe:

> s3cat BUCKET/OBJECT | zcat - | grep "log_id"

6

Da S3 REST API » Operations on Objects » GET Object:

Per utilizzare GET, è necessario aver letto l'accesso all'oggetto. Se si concede l'accesso READ all'utente anonimo, è possibile restituire l'oggetto senza utilizzare un'intestazione di autorizzazione.

Se questo è il caso, è possibile utilizzare:

$ curl <url-of-your-object> | zcat | grep "log_id" 

o

$ wget -O- <url-of-your-object> | zcat | grep "log_id" 

Tuttavia, se non è stato concesso l'accesso LEGGI anonimo sull'oggetto, è necessario creare e inviare l'intestazione di autorizzazione come parte della richiesta GET e ciò diventa un po 'noioso da fare con curl/wget. Fortunatamente per te, qualcuno l'ha già fatto e questo è il Perl aws script by Tim Kay come recommended by Hari. Nota che non devi mettere lo script di Tim Kay sul tuo percorso o altrimenti installarlo (tranne renderlo eseguibile), a patto che tu usi le versioni di comando che iniziano con aws, ad es.

$ ./aws cat BUCKET/OBJECT | zcat | grep "log_id" 
2

Se il sistema operativo lo supporta (probabile) è possibile utilizzare /dev/fd/1 per l'obiettivo per aws s3 cp:

aws s3 cp s3://bucket_name/your_file | zcat | grep log_id 

Sembra che ci siano alcuni byte finali dopo EOF, ma zcat e bzcat ubicazione appena scrivere un avviso a STDERR.

Ho appena confermato che questo funziona caricando alcuni DB discariche direttamente da S3 in questo modo:

aws s3 cp s3://some_bucket/some_file.sql.bz2 /dev/fd/1 | bzcat -c | mysql -uroot some_db 

Tutto questo con niente ma la roba già sul computer e gli strumenti ufficiali AWS CLI. Vincere.

0

È necessario provare a utilizzare s3streamcat, supporta i file compressi bzip, gzip e xz.

Installare con

sudo pip install s3streamcat Uso

Usage:

s3streamcat s3://bucketname/dir/file_path 
s3streamcat s3://bucketname/dir/file_path | more 
s3streamcat s3://bucketname/dir/file_path | grep something 
1

trovato questa discussione oggi, e c'è piaciuto la risposta di Keith. Fast forward al AWS di oggi CLI è fatto con:

aws s3 cp s3://some-bucket/some-file.bz2 - | bzcat -c | mysql -uroot some_db 

potrebbe risparmiare qualcun altro un po 'di tempo.