2012-07-25 2 views
3

내가 follwing을 스크립트를 사용하여 S3에 DynamoDB의 데이터를 수출하고있다 : 나는 주어진 파일 이름으로 출력을 기록 할 S3에서HIVE 스크립트 - S3 위치로 파일 이름을 지정

CREATE EXTERNAL TABLE TableDynamoDB(col1 String, col2 String) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES (
"dynamodb.table.name" = "TableDynamoDB", 
"dynamodb.column.mapping" = "col1:col1,col2:col2" 
); 

CREATE EXTERNAL TABLE TableS3(col1 String, col2 String) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LOCATION 's3://myBucket/DataFiles/MyData.txt'; 

INSERT OVERWRITE TABLE TableS3 
SELECT * FROM TableDynamoDB; 

을 (를 mydata.txt) 하지만 현재 작동하는 방식은 위의 스크립트에서 이름이 'MyData.txt'인 폴더를 만든 다음이 폴더 아래에 임의의 이름으로 파일을 생성했습니다.

HIVE를 사용하여 S3에 파일 이름을 지정할 수 있습니까?

감사합니다.

답변

2

몇 가지 :

하둡은 S3에 데이터를 쓸 수있는 2 개 가지 방법이 있습니다
  • . 이 wiki은 조금 더 세부적인 차이점을 설명합니다. "s3"구성표를 사용하고 있으므로 블록 번호가 표시됩니다.
  • 일반적으로 M/R 작업 (및 하이브 쿼리)은 출력을 여러 파일에 기록하려고합니다. 이것은 병렬 처리의 아티팩트입니다. 실제로, hadoop의 대부분의 명령/API는 디렉토리를 매우 매끄럽게 처리하므로 버그가 너무 많이 발생하지 않도록해야합니다. 또한 디렉토리에서 hadoop fs -getmerge과 같은 것을 사용하여 단일 스트림의 모든 파일을 읽을 수 있습니다.
  • AFAIK, 외부 하이브 테이블에 대한 DDL의 LOCATION 인수는 항상 위의 이유로 디렉토리로 처리됩니다.