2017-04-26 16 views
3

に年月日時間フォルダ形式からparitition再私はAWS EMRの生態系で働いています。消防ホース - DT = YY-MM-DD形式

S3://バケット/ YYYY /ハイブパーティションのフォーマット

S3へのMM/DD/HH

://バケット私はAWSに消防ホース出力を再分割するためにスマートな方法を探しています

/DT = YY-MM-DD-HH

任意の提案ですか?私たちは、S3DistCpを使用してこの問題を解決してきました

おかげで、 オミド

答えて

0

をBoto3に同じ回答を追加しました(現在のラムダのデフォルトパッケージと一致するように)

import re 
import boto3 

##set buckets: 
source_bucket='walla-anagog-us-east-1' 
destination_bucket='walla-anagog-eu-west-1' 

## regex from from YYYY/MM/DD/HH to dt=YYYY-MM-DD 
##replaced_file = re.sub(r'(\d{4})\/(\d{2})\/(\d{2})\/(\d{2})', r'dt=\1-\2-\3' , file) 

client = boto3.client('s3') 
s3 = boto3.resource('s3') 
mybucket = s3.Bucket(source_bucket) 

for object in mybucket.objects.all(): 
    replaced_key = re.sub(r'(\d{4})\/(\d{2})\/(\d{2})\/(\d{2})', r'dt=\1-\2-\3' , object.key) 
    print(object.key) 
    client.copy_object(Bucket=destination_bucket, CopySource=source_bucket+"/"+object.key, Key=replaced_key, ServerSideEncryption='AES256') 
    client.delete_object(Bucket=source_bucket, Key=object.key) 
1

。私たちは、適切に前置されているディレクトリへのパターン、および出力によってグループ化、データの時間ごとの集計を行います。

これは間違いなくFirehoseに欠けている機能であり、Firehoseのみでこれを行う方法は現在ありません。

http://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html

0

私は、ファイルを移動し、それらを再分割するのpythonとのbotoを使用。 私は YYYY/MM/DD/HH DT = YY-MM-DD-HH へ

コードスニペット(予告のsrcキーが削除された)からのキー名前を変更するために正規表現を適用:

from boto.s3.connection import S3Connection 
import re 

conn = S3Connection('xxx','yyy') 

##get buckets: 
source_bucket='srcBucketName' 
destination_bucket='dstBucketName' 

src = conn.get_bucket(source_bucket) 
dst = conn.get_bucket(destination_bucket) 

##Iterate 
for key in src.list(): 
    #print key.name.encode('utf-8') 
    file = key.name.encode('utf-8')  

    replaced_file = re.sub(r'(\d{4})\/(\d{2})\/(\d{2})\/(\d{2})', r'dt=\1-\2-\3-\4' , file) 
    #print replaced_file 

    #actual copy  
    dst.copy_key(replaced_file,src.name,file,encrypt_key=True) 
    key.delete() 
関連する問題