如何使用配置单元脚本删除AWS中S3存储桶中的000000文件

时间:2013-06-28 10:13:47

标签: hadoop amazon-web-services amazon-s3 hive

我创建了一个工作的配置单元脚本,用于将数据从dynamodb备份到AWS中的S3存储桶中的文件。代码段如下所示

INSERT OVERWRITE DIRECTORY '${hiveconf:S3Location}' 
SELECT *
FROM DynamoDBDataBackup;

当我运行hive脚本时,它可能会删除旧文件并创建一个新文件,但如果备份过程中有错误,我猜它会回滚到旧数据,因为发生错误时文件仍然存在。

我们每天都要进行备份,但我需要知道是否发生了错误,所以我想先删除前几天的备份然后再创建备份。如果失败则文件夹中没有我们可以自动检测到的文件。

文件名自动命名为000000

在我的蜂巢脚本中,我尝试过不成功:

delete FILE '${hiveconf:S3Location}/000000'

delete FILE '${hiveconf:S3Location}/000000.0'

也许文件名错了。我没有对文件设置任何权限。

我刚试过这个但是在STORED

失败了
SET dynamodb.endpoint= ${DYNAMODBENDPOINT}; 
SET DynamoDBTableName = "${DYNAMODBTABLE}";
SET S3Location = ${LOCATION};

DROP TABLE IF EXISTS DynamoDBDataBackupPreferenceStore;

CREATE TABLE IF NOT EXISTS DynamoDBDataBackupPreferenceStore(UserGuid STRING,PreferenceKey STRING,DateCreated STRING,DateEmailGenerated STRING,DateLastUpdated STRING,ReceiveEmail STRING,HomePage STRING,EmailFormat STRING,SavedSearchCriteria STRING,SavedSearchLabel STRING),   
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'

LOCATION'$ {hiveconf:S3Loc​​ation}',     TBLPROPERTIES(“dynamodb.table.name”= $ {hiveconf:DynamoDBTableName},“dynamodb.column.mapping”=“UserGuid:UserGuid,PreferenceKey:PreferenceKey,DateCreated:DateCreated,DateEmailGenerated:DateEmailGenerated,DateLastUpdated:DateLastUpdated,ReceiveEmail:ReceiveEmail,主页:首页,EmailFormat:EmailFormat,SavedSearchCriteria:SavedSearchCriteria,SavedSearchLabel:SavedSearchLabel“);

1 个答案:

答案 0 :(得分:2)

您可以使用Hive Table命令直接管理文件

首先,如果要在Hive外部使用外部数据,请在创建表时使用外部命令

set S3Path='s3://Bucket/directory/';

CREATE EXTERNAL TABLE IF NOT EXISTS S3table
( data STRING
)
ROW FORMAT DELIMITED
       FIELDS TERMINATED BY ','
   LOCATION ${hiveconf:S3Path};

您现在可以将数据插入此表

 INSERT OVERWRITE TABLE S3table
    SELECT data
    FROM DynamoDBtable; 

这将在目录位置内的S3中创建文本文件 注意,根据数据大小和reducer的数量,可能有多个文本文件。 文件名也是随机GUID元素,即03d3842f-7290-4a75-9c22-5cdb8cdd201b_000000

DROP TABLE S3table;

删除表只会破坏文件的链接

现在,如果要管理目录,可以创建一个控制S3目录的表(注意没有external命令)

CREATE TABLE IF NOT EXISTS S3table
( data STRING
)
ROW FORMAT DELIMITED
       FIELDS TERMINATED BY ','
   LOCATION ${hiveconf:S3Path};

如果您现在发出drop table命令,文件夹中的所有文件都会立即删除

DROP TABLE S3table;

我建议您创建一个非外部表,然后删除它并继续执行其余的脚本。如果遇到错误,则在作业完成后将有一个空白目录

希望这能满足您的需求