파이프라인 활동으로 데이터 및 테이블 준비 - AWS Data Pipeline

AWS Data Pipeline 신규 고객은 더 이상 이용할 수 없습니다. 의 기존 고객 AWS Data Pipeline 정상적으로 서비스를 계속 사용할 수 있습니다. 자세히 알아보기

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

파이프라인 활동으로 데이터 및 테이블 준비

AWS Data Pipeline은 파이프라인에서 입력 및 출력 데이터를 스테이징하여 ShellCommandActivityHiveActivity 같은 특정 활동을 좀더 쉽게 사용할 수 있게 해줍니다.

데이터 스테이징을 사용하면 입력 데이터 노드의 데이터를 활동 실행 중인 리소스로 복사할 수 있으며, 마찬가지로 리소스에서 출력 데이터 노드로도 복사할 수 있습니다.

Amazon EMR 또는 Amazon EC2 리소스에서 스테이징된 데이터는 활동의 쉘 명령 또는 Hive 스크립트의 특수 변수를 이용해 사용할 수 있습니다.

테이블 스테이징도 데이터 스테이징과 유사하지만, 스테이징된 데이터가 데이터베이스 테이블의 양식을 띈다는 점이 다릅니다.

AWS Data Pipeline은 다음 스테이징 시나리오를 지원합니다.

  • ShellCommandActivity로 데이터 스테이징

  • Hive 및 스테이징 지원 데이터 노드로 테이블 스테이징

  • Hive 및 스테이징 비-지원 데이터 노드로 테이블 스테이징

참고

스테이징은 stage 필드가 ShellCommandActivity 등의 활동에서 true로 설정될 때만 작동합니다. 자세한 내용은 ShellCommandActivity 섹션을 참조하세요.

그리고 데이터 노드와 활동의 관계를 다음 네 방식으로 설정할 수 있습니다.

리소스에서 로컬로 데이터 스테이징

입력 데이터가 자동으로 리소스 로컬 파일 시스템에 복사됩니다. 출력 데이터가 자동으로 리소스 로컬 파일 시스템에서 출력 데이터 노드로 복사됩니다. 예를 들어, ShellCommandActivity 입력 및 출력을 스테이징 = true로 구성하면 입력 데이터는 INPUTx_STAGING_DIR로 사용할 수 있고, 출력 데이터는 OUTPUTx_STAGING_DIR로 사용할 수 있습니다. 여기서 x는 입력 또는 출력 번호입니다.

활동의 입력 및 출력 정의 스테이징

입력 데이터 형식(열 이름과 테이블 이름)이 자동으로 활동의 리소스에 복사됩니다. 예를 들어, HiveActivity를 스테이징 = true로 구성할 때가 이에 해당합니다. 입력 S3DataNode에 지정된 데이터 형식을 사용하여 Hive 테이블의 테이블 정의를 스테이징합니다.

활성화되지 않은 스테이징

입력 및 출력 객체와 그 필드를 활동에 사용할 수 있지만 데이터는 사용하지 못합니다. 예를 들어, EmrActivity(기본값) 또는 기타 활동을 스테이징 = false로 구성할 때가 이에 해당합니다. 이 구성에서는 데이터 필드를 활동에 사용하여 AWS Data Pipeline 표현식 구문으로 참조할 수 있으며, 이는 종속성이 충족될 때만 가능합니다. 이것은 종속성 확인 기능만 합니다. 활동의 코드는 입력값의 데이터를 해당 활동을 실행하는 리소스로 복사하는 역할을 담당합니다.

객체 사이의 종속성 관계

객체 사이에 종속 관계가 있는데, 이것 때문에 스테이징이 활성화되지 않을 때와 유사한 상황이 발생합니다. 이로 인해 데이터 노드나 활동이 다른 활동을 실행하는 사전 조건 역할을 하게 됩니다.

ShellCommandActivity로 데이터 스테이징

S3DataNode 객체가 데이터 입력 및 출력인 ShellCommandActivity를 사용하는 시나리오를 생각해봅니다. AWS Data Pipeline은 다음 예제에 표시된 환경 변수 ${INPUT1_STAGING_DIR}${OUTPUT1_STAGING_DIR}를 사용하여 데이터 노드를 자동으로 스테이징하여 로컬 파일 폴더인 것처럼 셸 명령에 액세스할 수 있게 합니다. 이름이 INPUT1_STAGING_DIROUTPUT1_STAGING_DIR인 변수의 숫자 부분은 활동이 참조하는 데이터 노드의 수에 따라 증분합니다.

참고

이 시나리오는 데이터 입력과 출력이 S3DataNode 객체일 경우에만 설명대로 작동합니다. 그리고 출력 데이터 스테이징은 directoryPath가 출력 S3DataNode 객체에 설정된 경우에만 허용됩니다.

{ "id": "AggregateFiles", "type": "ShellCommandActivity", "stage": "true", "command": "cat ${INPUT1_STAGING_DIR}/part* > ${OUTPUT1_STAGING_DIR}/aggregated.csv", "input": { "ref": "MyInputData" }, "output": { "ref": "MyOutputData" } }, { "id": "MyInputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "filePath": "s3://my_bucket/source/#{format(@scheduledStartTime,'YYYY-MM-dd_HHmmss')}/items" } }, { "id": "MyOutputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://my_bucket/destination/#{format(@scheduledStartTime,'YYYY-MM-dd_HHmmss')}" } }, ...

Hive 및 스테이징 지원 데이터 노드로 테이블 스테이징

S3DataNode 객체가 데이터 입력 및 출력인 HiveActivity를 사용하는 시나리오를 생각해봅니다. AWS Data Pipeline은 HiveActivity에 대한 다음 예제에 표시된 환경 변수 ${input1}${output1}를 사용하여 데이터 노드를 자동으로 스테이징하여 Hive 테이블인 것처럼 Hive 스크립트에 액세스할 수 있게 합니다. 이름이 inputoutput인 변수의 숫자 부분은 활동이 참조하는 데이터 노드의 수에 따라 증분합니다.

참고

이 시나리오는 데이터 입력 및 출력이 S3DataNode 또는 MySqlDataNode 객체인 경우에만 설명대로 작동합니다. DynamoDBDataNode는 테이블 스테이징이 지원되지 않습니다.

{ "id": "MyHiveActivity", "type": "HiveActivity", "schedule": { "ref": "MySchedule" }, "runsOn": { "ref": "MyEmrResource" }, "input": { "ref": "MyInputData" }, "output": { "ref": "MyOutputData" }, "hiveScript": "INSERT OVERWRITE TABLE ${output1} select * from ${input1};" }, { "id": "MyInputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/input" } }, { "id": "MyOutputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/output" } }, ...

Hive 및 스테이징-비지원 데이터 노드로 테이블 스테이징

DynamoDBDataNode가 데이터 입력이고 S3DataNode 객체가 출력인 HiveActivity를 사용하는 시나리오를 생각해봅니다. DynamoDBDataNode에 대해 데이터 스테이징을 사용할 수 없으므로, 먼저 Hive 스크립트 안에 수동으로 테이블을 생성하고, 이름이 #{input.tableName}인 변수를 사용하여 DynamoDB 테이블을 참조해야 합니다. DynamoDB 테이블이 출력일 경우에도 비슷한 명칭이 적용됩니다. 단, 변수 #{output.tableName}을(를) 사용하는 것이 다릅니다. 이 예제에서는 출력 S3DataNode 객체에 스테이징을 사용할 수 있어 ${output1} 같은 출력 데이터 노드를 참조할 수 있습니다.

참고

이 예제에서는 테이블 이름 변수에 #(해시) 문자 접두사가 있는데, 그 이유는 AWS Data Pipeline이 표현식을 사용하여 tableName 또는 directoryPath에 액세스하기 때문입니다. AWS Data Pipeline에서 표현식 평가가 어떻게 이루어지는지에 관한 자세한 내용은 표현식 평가 단원을 참조하십시오.

{ "id": "MyHiveActivity", "type": "HiveActivity", "schedule": { "ref": "MySchedule" }, "runsOn": { "ref": "MyEmrResource" }, "input": { "ref": "MyDynamoData" }, "output": { "ref": "MyS3Data" }, "hiveScript": "-- Map DynamoDB Table SET dynamodb.endpoint=dynamodb.us-east-1.amazonaws.com; SET dynamodb.throughput.read.percent = 0.5; CREATE EXTERNAL TABLE dynamodb_table (item map<string,string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "#{input.tableName}"); INSERT OVERWRITE TABLE ${output1} SELECT * FROM dynamodb_table;" }, { "id": "MyDynamoData", "type": "DynamoDBDataNode", "schedule": { "ref": "MySchedule" }, "tableName": "MyDDBTable" }, { "id": "MyS3Data", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/output" } }, ...