AWS Kinesis Firehose不在Redshift中插入数据

时间:2015-12-10 16:46:08

标签: amazon-web-services amazon-redshift amazon-kinesis-firehose

我尝试让Kinesis Firehose在Redshift表中推送数据。

firehose流正在工作并将数据放入S3。

但Redshift中的目标表中没有任何内容。

  • 在指标中,DeliveryToRedshift成功为0(DeliveryToRedshift记录为空)
  • 加载日志(redshift Web控制台)和STL_LOAD_ERRORS表为空。
  • 我检查过Firehose能够连接到Redshift(我看到STL_CONNECTION_LOG中的连接)

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:35)

最后,我通过删除并重新创建Firehose流来使其工作: - / 可能通过Web控制台重复编辑使得事情不稳定。

但这是故障排除指南:

  • 一个很好的起点是这个程序:http://docs.aws.amazon.com/firehose/latest/dev/troubleshooting.html
  • 检查数据是否到达S3
  • 此时,Firehose监控中的“DeliveryToS3 Success”指标应为非零
  • Redshift群集必须可公开访问(请参阅群集Web控制台)
  • 群集的安全组必须允许来自Firehose IP地址的入站流量:Firehose当前为每个可用的AWS区域使用一个CIDR块:
    • 52.70.63.192/27 for US East(N。Virginia)
    • 52.89.255.224/27 for US West(Oregon)
    • 52.19.239.192/27 for EU(Ireland)
  • 仔细检查您为Firehose提供的红移用户/密码
  • 此时,您应该能够在Redshift日志中看到连接尝试:

    @list
  • 检查Firehose使用的Redshift用户是否对目标表具有足够的权限:

    select * from stl_connection_log where remotehost like '52%' order by recordtime desc;  
    
  • 然后您可以检查COPY命令是否已运行:

    select tablename, 
       HAS_TABLE_PRIVILEGE(tablename, 'select') as select,
       HAS_TABLE_PRIVILEGE(tablename, 'insert') as insert,
       HAS_TABLE_PRIVILEGE(tablename, 'update') as update,
       HAS_TABLE_PRIVILEGE(tablename, 'delete') as delete, 
       HAS_TABLE_PRIVILEGE(tablename, 'references') as references 
    from pg_tables where schemaname='public' order by tablename;
    
  • 然后检查加载错误或服务器错误:

    select * from stl_query order by endtime desc limit 10;
    
  • 如果数据或COPY选项中存在格式问题,或者数据与目标列不匹配,则至少应该看到COPY尝试和一些加载错误。

  • 如果您仍然卡住,这些日志表中没有任何内容,请尝试删除并重新创建整个firehose流,因为可能存在与Web控制台相关的一些错误。 (这一步对我有用)

答案 1 :(得分:6)

转到在Kinesis Firehose设置期间自动创建的IAM角色(firehose_delivery_role),并确保附加以下角色:

AmazonS3FullAccess
AmazonRedshiftFullAccess
AmazonKinesisFullAccess
AmazonKinesisFirehoseFullAccess

有一个错误在IAM中省略了S3凭据,导致Kinesis设置无法正常工作。

同时验证您实际上是否看到在S3中累积的数据文件。

答案 2 :(得分:1)

在Kinesis Firehos设置期间,使用Redshift masteruser凭据。任何其他用户都无法使用。