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 小时后自动中止的主要内容,如果未能解决你的问题,请参考以下文章
不使用 jdbc 驱动程序查询 Amazon Redshift