2012-07-25 26 views
3

我使用follwing腳本出口從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; 

在S3中,我想寫輸出給定的文件名(MyData.txt) 但它目前的工作方式是上面的腳本創建名爲'MyData.txt' 的文件夾,然後在該文件夾下生成一個帶有一些隨機名稱的文件。

是否可以在使用HIVE的S3中指定文件名?

謝謝!

回答

2

有幾件事情:

  • 有2種不同方式的Hadoop可以將數據寫入到S3。這wiki更詳細地描述了差異。由於您使用的是「s3」方案,因此您可能會看到一個區號。
  • 通常,M/R作業(和配置單元查詢)將要將其輸出寫入多個文件。這是並行處理的人工產物。實際上,hadoop中的大多數命令/ API都非常無縫地處理目錄,因此您不應該讓它太多地bug。此外,您可以在目錄上使用諸如hadoop fs -getmerge之類的內容來讀取單個數據流中的所有文件。
  • AFAIK,外部配置單元表的DDL中的LOCATION參數始終被視爲上述原因的目錄。