2013-08-03 105 views
9

tôi đang cố gắng để truyền dữ liệu CSV từ S3 xô đến DynamoDB sử dụng đường ống dẫn AWS, đây là kịch bản đường ống của tôi, nó không hoạt động đúng,đường ống AWS Dữ liệu từ S3 để DynamoDB

cấu trúc tập tin CSV

Name, Designation,Company 

A,TL,C1 

B,Prog, C2 

DynamoDb: N_Table, với tên chính thức giá trị băm

{ 
"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" 
    } 
] 

}

Trong số bốn bước trong khi thực hiện đường ống, hai bước đang hoàn tất, nhưng nó không thực hiện hoàn toàn

Trả lời

0

Tôi khuyên bạn nên sử dụng định dạng dữ liệu CSV được cung cấp bởi datapipeline thay vì tùy chỉnh.

Để gỡ lỗi các lỗi trên cụm, bạn có thể tra cứu luồng công việc trong bảng điều khiển EMR và xem tệp nhật ký cho các tác vụ không thành công.

3

Nếu bạn đang sử dụng đường dẫn dữ liệu mẫu để nhập dữ liệu từ S3 vào DynamoDB, các định dạng dữ liệu này sẽ không hoạt động. Thay vào đó, hãy sử dụng định dạng trong liên kết bên dưới để lưu trữ tệp dữ liệu S3 đầu vào http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-importexport-ddb-pipelinejson-verifydata2.html

Định dạng tệp đầu ra này được tạo ra bởi đường dẫn dữ liệu mẫu xuất dữ liệu từ DynamoDB đến S3.

Hy vọng điều đó sẽ hữu ích.

5

Hiện tại (2015-04) mẫu đường dẫn nhập mặc định không hỗ trợ nhập tệp CSV.

Nếu tệp CSV của bạn không quá lớn (dưới 1GB hoặc hơn), bạn có thể tạo ShellCommandActivity để chuyển đổi CSV sang định dạng JSON DynamoDB đầu tiên và nguồn cấp dữ liệu để EmrActivity nhập tệp JSON kết quả vào bảng của bạn. Bước đầu tiên bạn có thể tạo bảng DynamoDB mẫu bao gồm tất cả các loại trường bạn cần, điền vào với các giá trị giả và sau đó xuất bản ghi bằng cách sử dụng đường ống (nút Xuất/Nhập trong bảng điều khiển DynamoDB). Điều này sẽ cung cấp cho bạn ý tưởng về định dạng được mong đợi bằng cách nhập Đường ống dẫn. Tên loại không rõ ràng và hoạt động Nhập rất nhạy cảm về trường hợp chính xác (ví dụ: bạn nên có trường cho trường boolean). Sau đó, bạn có thể dễ dàng tạo tập lệnh awk (hoặc bất kỳ trình chuyển đổi văn bản nào khác, ít nhất là với awk, bạn có thể sử dụng hình ảnh AMI mặc định cho hoạt động shell), bạn có thể nạp vào shellCommandActivity của mình. Đừng quên bật cờ "dàn dựng", vì vậy đầu ra của bạn được tải lên trở lại S3 cho hoạt động Nhập để chọn nó.

0

Xem liên kết bên dưới để biết giải pháp hoạt động (trong phần câu hỏi), mặc dù EMR 3.x. Chỉ cần thay đổi dấu phân tách thành "columnSeparator": ",". Cá nhân, tôi sẽ không làm CSV trừ khi bạn chắc chắn dữ liệu được khử trùng một cách chính xác.

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