2011-10-11 13 views
10

amazon s3に保存されているgzipファイルがcatできるかどうか疑問に思っています。おそらく、いくつかのストリームクライアントを使用しています。どう思いますか?私たちは、zcat s3://bucket_name/your_file | grep "log_id"zcat on amazon s3

答えて

4

と同様の動作のためにlokingされ

ないexaclty zcatのが、大きなファイルをダウンロードするためにHadoopを使用する方法は、S3からの平行が可能性がありhttp://hadoop.apache.org/common/docs/current/distcp.html

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

または

のHadoop distcpのS3:// YOUR_BUCKET/your_file HDFS://マスター:8020/your_file

012たぶん、あなたはパイプzcatをすることができ、この点から

...

あなたとコア-site.xmlファイルを編集する必要があなたの資格情報を追加するには:あなたはまたs3catを使用することができ

<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

GETを使用するには、オブジェクトへの読み取りアクセスが必要です。匿名ユーザーへのREADアクセスを許可すると、権限ヘッダーを使用せずにオブジェクトを返すことができます。

そのような場合は、使用することができます:

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

または

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

を使用すると、オブジェクト上の匿名のREADアクセスを許可していない場合は、あなたが作成する必要がありますし、承認ヘッダーをGETリクエストの一部として送信します。これは、curl/wgetとやや面倒です。あなたにとってラッキーなことに、誰かがすでにそれをやっており、それはとしてrecommended by Hariです。 awsで始まるコマンドバージョンを使用している限り、あなたのパスにTim Kayのスクリプトを置く必要はなく、そうでなければインストールすることができます(実行可能にすることを除いて)。

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

あなたのOSは、(おそらく)それをサポートしている場合は、aws s3 cpのためにターゲットの/dev/fd/1を使用することができます。

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

ありEOFの後にいくつかの末尾のバイトのように見えるが、zcatbzcatは便利なだけ書きますSTDERRに警告します。私は、これは、いくつかのDBをロードすることによって動作することを確認し

は次のようにまっすぐS3からダンプ:

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

すべてこの既にコンピュータと公式AWS CLIツール上のものに過ぎないと。勝つ。

0

s3streamcatを試す必要があります.bzip、gzip、xz圧縮ファイルをサポートしています。

sudo pip install s3streamcat 使用

使用してインストールします。

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

は、今日、このスレッドを発見し、キースの答えを言っています。今日のaws cliに早送りします:

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

誰か他の人に少し時間を節約するかもしれません。