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"
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"
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>
Si potrebbe anche usare s3cat, parte di Tim toolkit della riga di comando di Kay per AWS:
per ottenere l'equivalente di zcat FILENAME | grep "log_id"
, si farebbe:
> s3cat BUCKET/OBJECT | zcat - | grep "log_id"
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"
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.
È 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
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.