1

我创建了一个工作配置单元脚本,用于将数据从 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,HomePage:HomePage,EmailFormat:EmailFormat,SavedSearchCriteria:SavedSearchCriteria,SavedSearchLabel:SavedSearchLabel");

4

1 回答 1

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;

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

希望这涵盖了您所需要的

于 2013-06-28T11:26:12.370 回答