Amazon redshift 查询在 1 小时后自动中止

Posted

技术标签:

【中文标题】Amazon redshift 查询在 1 小时后自动中止【英文标题】:Amazon redshift query aborts automatically after 1 hour 【发布时间】:2018-04-10 20:35:54 【问题描述】:

我在 amazon s3 中有大约 500GB 的压缩数据。我想将此数据加载到 Amazon Redshift。为此,我在 AWS Athena 中创建了一个内部表,并尝试将数据加载到 Amazon Redshift 的内部表中。

将这些大数据加载到 Amazon Redshift 需要一个多小时。问题是当我触发一个查询以加载数据时,它会在 1 小时后中止。我尝试了 2-3 次,但 1 小时后它就中止了。我正在使用 Aginity Tool 来触发查询。此外,在 Aginity 工具中,它显示查询当前正在运行并且加载器正在旋转。

更多详情: Redshift 集群有 12 个节点,每个节点有 2TB 空间,我使用了 1.7TB 空间。 S3 文件的大小不同。其中之一是 250GB。其中一些以 MB 为单位。

我正在使用命令

create table table_name as select * from athena_schema.table_name

它恰好在 1 小时后停止。

注意:我已将 Aginity 中的当前查询超时设置为 90000 秒。

【问题讨论】:

为什么要通过 Athena 而不仅仅是运行复制命令? 我同意 - 复制命令可能更快而且 - 更便宜!!无论如何 - 正好是 1 小时吗?你的红移集群有多大?你确定你有足够的空间吗?您的 s3 数据是否拆分为小文件?什么尺寸?它们的大小都一样吗?你到底在运行什么命令?如果您使用的是频谱 - 您使用的是什么 serde(可能显示您的表格定义)请尽可能多地回答上述问题并将此详细信息添加到您的问题中 @JonScott 我已经为这个问题添加了更多细节。谢谢。 s3 文件是否被压缩了?该查询是否包括 250GB 文件? 你需要把你的文件拆分更多,把那个 250GB 的文件分成 1000 个更小的文件 【参考方案1】:

我知道这是一个旧线程,但对于因同样问题而来到这里的任何人,我已经意识到,至少对我而言,问题出在 Aginity 客户端;因此,它与 Redshift 或其工作负载管理器无关,而仅与称为 Aginity 的第三方客户端有关。总之,使用不同的客户端(如 SQL Workbench)并从那里运行 COPY 命令。

希望这会有所帮助! 卡洛斯 C.

更多信息,关于我的环境:

红移:

Cluster TypeThe cluster's type: Multi Node
Cluster: ds2.xlarge
NodesThe cluster's type: 4
Cluster Version: 1.0.4852 

客户端环境:

Aginity Workbench for Redshift
Version 4.9.1.2686 (build 05/11/17)
Microsoft Windows NT 6.2.9200.0 (64-bit)

网络:

Connected to Open***, via SSH Port tunneling. 
The connection is not being dropped. This issue is only affecting the COPY command. The connection remains active. 

命令:

copy tbl_XXXXXXX 
from 's3://***************'
iam_role 'arn:aws:iam::***************:role/***************';

S3 结构:

120 files of 6.2 GB each. 20 files of 874MB.

输出:

ERROR: 57014: Query (22381) cancelled on user's request

统计:

Start:    ***************
End:      ***************
Duration: 3,600.2420863

【讨论】:

顺便说一下,也许 Aginity 客户端可以选择将其设置为更高的值(>3600 秒)或禁用它。我没有检查,因为我的 SQL Workbench 已经打开了。【参考方案2】:

我不确定以下答案是否能解决您确切的 1 小时超时问题。 但是,根据我的经验,在 Redshift 加载数据的情况下,通过 Copy 命令是最好和快速的方法。所以我觉得你的情况根本不应该发生超时问题。

RedShift 中的复制命令可以从 S3 或通过 SSH 加载数据。

例如 简单复制

copy sales from 'emr://j-SAMPLE2B500FC/myoutput/part-*' iam_role 
'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '\t' lzop;

例如使用清单

copy customer
from 's3://mybucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;

PS:即使您使用 Menifest 将数据分成多个文件,RedShift 并行加载数据也会更快。

【讨论】:

我尝试使用复制命令,但现在它在 7 小时 20 分钟后中止。我有一个文件要加载到 Redshift 中,它是 gzip 格式的 250 GB。 @RohanB 在您的情况下,我认为您需要解压缩 250GB 文件,然后将其拆分为 3-4 个文件,每个文件 70GB,然后单独压缩它们,然后上传到 S3,创建Menifest 文件,将 Menifest 上传到 S3,然后使用类似于我建议的 Menifest 命令触发 Copy 命令。此外,您可以使用忽略选项来使少数记录失败,因为您的拆分命令可能会损坏这些记录。然后再导入。

以上是关于Amazon redshift 查询在 1 小时后自动中止的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift 是不是有自己的存储后端

在 Amazon Redshift 中按日期透视查询

不使用 jdbc 驱动程序查询 Amazon Redshift

使用 Amazon Redshift / PostgreSQL 进行漏斗查询

与 Amazon Redshift 同步

查询缓存amazon redshift