2013-08-03 13 views
9

मैं, एडब्ल्यूएस पाइप लाइन का उपयोग कर DynamoDB को S3 बाल्टी से सीएसवी डेटा स्थानांतरित करने के कोशिश कर रहा हूँ के बाद मेरे पाइप लाइन स्क्रिप्ट है, यह ठीक से काम नहीं कर रहा है,एडब्ल्यूएस डेटा पाइपलाइन सीएसवी डेटा DynamoDB को

CSV फ़ाइल संरचना

Name, Designation,Company 

A,TL,C1 

B,Prog, C2 

DynamoDb: N_Table, नाम के साथ हैश मान के रूप में

{ 
"objects": [ 
    { 
     "id": "Default", 
     "scheduleType": "cron", 
     "name": "Default", 
     "role": "DataPipelineDefaultRole", 
     "resourceRole": "DataPipelineDefaultResourceRole" 
    }, 
    { 
     "id": "DynamoDBDataNodeId635", 
     "schedule": { 
      "ref": "ScheduleId639" 
     }, 
     "tableName": "N_Table", 
     "name": "MyDynamoDBData", 
     "type": "DynamoDBDataNode" 
    }, 
    { 
     "emrLogUri": "s3://onlycsv/error", 
     "id": "EmrClusterId636", 
     "schedule": { 
      "ref": "ScheduleId639" 
     }, 
     "masterInstanceType": "m1.small", 
     "coreInstanceType": "m1.xlarge", 
     "enableDebugging": "true", 
     "installHive": "latest", 
     "name": "ImportCluster", 
     "coreInstanceCount": "1", 
     "logUri": "s3://onlycsv/error1", 
     "type": "EmrCluster" 
    }, 
    { 
     "id": "S3DataNodeId643", 
     "schedule": { 
      "ref": "ScheduleId639" 
     }, 
     "directoryPath": "s3://onlycsv/data.csv", 
     "name": "MyS3Data", 
     "dataFormat": { 
      "ref": "DataFormatId1" 
     }, 
     "type": "S3DataNode" 
    }, 
    { 
     "id": "ScheduleId639", 
     "startDateTime": "2013-08-03T00:00:00", 
     "name": "ImportSchedule", 
     "period": "1 Hours", 
     "type": "Schedule", 
     "endDateTime": "2013-08-04T00:00:00" 
    }, 
    { 
     "id": "EmrActivityId637", 
     "input": { 
      "ref": "S3DataNodeId643" 
     }, 
     "schedule": { 
      "ref": "ScheduleId639" 
     }, 
     "name": "MyImportJob", 
     "runsOn": { 
      "ref": "EmrClusterId636" 
     }, 
     "maximumRetries": "0", 
     "myDynamoDBWriteThroughputRatio": "0.25", 
     "attemptTimeout": "24 hours", 
     "type": "EmrActivity", 
     "output": { 
      "ref": "DynamoDBDataNodeId635" 
     }, 
     "step": "s3://elasticmapreduce/libs/script-runner/script-runner.jar,s3://elasticmapreduce/libs/hive/hive-script,--run-hive-script,--hive-versions,latest,--args,-f,s3://elasticmapreduce/libs/hive/dynamodb/importDynamoDBTableFromS3,-d,DYNAMODB_OUTPUT_TABLE=#{output.tableName},-d,S3_INPUT_BUCKET=#{input.directoryPath},-d,DYNAMODB_WRITE_PERCENT=#{myDynamoDBWriteThroughputRatio},-d,DYNAMODB_ENDPOINT=dynamodb.us-east-1.amazonaws.com" 
    }, 
    { 
     "id": "DataFormatId1", 
     "name": "DefaultDataFormat1", 
     "column": [ 
      "Name", 
      "Designation", 
      "Company" 
     ], 
     "columnSeparator": ",", 
     "recordSeparator": "\n", 
     "type": "Custom" 
    } 
] 

}

पाइपलाइन को निष्पादित करते समय चार चरणों में से, दो समाप्त हो रहे हैं, लेकिन यह पूरी तरह से

उत्तर

0

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

क्लस्टर पर त्रुटियों को डीबग करने के लिए, आप ईएमआर कंसोल में जॉबफ्लो देख सकते हैं और असफल कार्यों के लिए लॉग फ़ाइलों को देख सकते हैं।

3

यदि आप एस 3 से डायनेमो डीबी में डेटा आयात करने के लिए टेम्पलेट डेटा पाइपलाइन का उपयोग कर रहे हैं, तो ये डेटाफॉर्म काम नहीं करेंगे। इसके बजाय, इनपुट एस 3 डेटा फ़ाइल http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-importexport-ddb-pipelinejson-verifydata2.html

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

उम्मीद है कि मदद करता है।

5

वर्तमान में (2015-04) डिफ़ॉल्ट आयात पाइपलाइन टेम्पलेट CSV फ़ाइलों को आयात करने का समर्थन नहीं करता है।

यदि आपकी सीएसवी फ़ाइल बहुत बड़ी नहीं है (1 जीबी या उससे भी कम) तो आप सीएसवी को डायनेमो डीबी जेएसओएन प्रारूप में कनवर्ट करने के लिए शैल कॉमांड एक्टिविटी बना सकते हैं और वह फ़ीड जो एम्आरएक्टिविटी के लिए है जो परिणामी JSON फ़ाइल को आपकी तालिका में आयात करती है।

पहले चरण के रूप में आप नमूना डायनेमोडीबी तालिका बना सकते हैं जिसमें आपको आवश्यक सभी फ़ील्ड प्रकारों सहित डमी मूल्यों के साथ पॉप्युलेट कर सकते हैं और फिर पाइपलाइन (डायनामो डीबी कंसोल में निर्यात/आयात बटन) का उपयोग करके रिकॉर्ड निर्यात कर सकते हैं। यह आपको आयात पाइपलाइन द्वारा अपेक्षित प्रारूप के बारे में विचार देगा। प्रकार के नाम स्पष्ट नहीं हैं, और आयात गतिविधि सही मामले के बारे में बहुत संवेदनशील है (उदा। आपके पास बूलियन फ़ील्ड के लिए बूल होना चाहिए)।

बाद में यह एक अजीब स्क्रिप्ट (या किसी भी अन्य पाठ कनवर्टर, कम से कम अजीब के साथ आप अपनी खोल गतिविधि के लिए डिफ़ॉल्ट एएमआई छवि का उपयोग कर सकते हैं) बनाने के लिए आसान होना चाहिए, जिसे आप अपने shellCommandActivity को खिला सकते हैं। "स्टेजिंग" ध्वज को सक्षम करना न भूलें, इसलिए आयात करने के लिए आयात गतिविधि के लिए आपका आउटपुट S3 पर वापस अपलोड किया गया है।

0

ईएमआर 3.x के बावजूद एक समाधान के लिए लिंक नीचे देखें (प्रश्न अनुभाग में)। बस डेलीमीटर को "columnSeparator": "," पर बदलें। निजी तौर पर, मैं CSV नहीं करता जबतक कि आप निश्चित नहीं हैं कि डेटा सही ढंग से संचरित है।

How to upgrade Data Pipeline definition from EMR 3.x to 4.x/5.x?

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