2011-10-11 14 views
10

मुझे आश्चर्य है कि क्या अमेज़ॅन एस 3 पर संग्रहीत एक gzip फ़ाइल बिल्ली को संभव है। शायद कुछ स्ट्रीमिंग क्लाइंट का उपयोग कर। तुम क्या सोचते हो?zaz पर amazon s3

हम एक ऑपरेशन zcat s3://bucket_name/your_file | grep "log_id"

उत्तर

4

के समान loking हैं नहीं exaclty एक zcat, लेकिन बड़ी फ़ाइलों को डाउनलोड करने के लिए Hadoop उपयोग करने के लिए एक तरह से एस 3 से समानांतर हो सकता है 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

इस बिंदु आप पाइप एक zcat कर सकते हैं से हो सकता है कि

...

आपके क्रेडेंशियल्स को जोड़ने के लिए आप के साथ कोर-site.xml फ़ाइल को संपादित करने के लिए है:,

<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

तुम भी s3cat इस्तेमाल कर सकते हैं टिम का हिस्सा एडब्ल्यूएस के लिए Kay के कमांड लाइन टूलकिट:

http://timkay.com/aws/

zcat FILENAME | grep "log_id" के बराबर पाने के लिए आपको क्या करना चाहते हैं:

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

6

S3 REST API » Operations on Objects » GET Object से:

प्राप्त का उपयोग करने के लिए आपको वस्तु का उपयोग करने को पढ़ लिया है चाहिए। यदि आप अनाम उपयोगकर्ता को रीड एक्सेस प्रदान करते हैं, तो आप ऑब्जेक्टेशन हेडर का उपयोग किए बिना ऑब्जेक्ट वापस कर सकते हैं।

अगर ऐसी बात है, तो आप उपयोग कर सकते हैं:

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

या

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

हालांकि, अगर आप वस्तु पर गुमनाम पढ़ें पहुंच प्रदान नहीं की है, तो आप बनाने की जरूरत है और GET अनुरोध के हिस्से के रूप में प्राधिकरण शीर्षलेख भेजें और यह curl/wget के साथ कुछ हद तक कठिन हो जाता है। आपके लिए भाग्यशाली, किसी ने पहले से ही यह कर लिया है और यह Perl aws script by Tim Kayrecommended by Hari है। ध्यान दें कि आपको टिम के की स्क्रिप्ट को अपने पथ पर नहीं रखना है या अन्यथा इसे इंस्टॉल करना (इसे निष्पादन योग्य को छोड़कर), जब तक आप कमांड संस्करणों का उपयोग करते हैं जो aws से शुरू होते हैं, उदाहरण के लिए।

$ ./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 के बाद कुछ पीछे चल बाइट्स होने लगते हैं, लेकिन zcat और bzcat सुविधाजनक स्थान पर सिर्फ एक लिखने STDERR पर चेतावनी।

मैं सिर्फ पुष्टि की है कि यह कुछ डीबी लोड करके काम करता है सीधे S3 से इस तरह उदासीनता:

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

यह सब पहले से ही अपने कंप्यूटर और सरकारी एडब्ल्यूएस 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 

किसी और को थोड़ा सा समय बचा सकता है।

संबंधित मुद्दे