AWS Kinesis Firehose 不在 Redshift 中插入数据

AWS Kinesis Firehose not inserting data in Redshift

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

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

但是在 Redshift 中没有任何东西到达目的地 table。

我该如何解决这个问题?

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

AmazonS3FullAccess
AmazonRedshiftFullAccess
AmazonKinesisFullAccess
AmazonKinesisFirehoseFullAccess

存在一个错误,它会在 IAM 中忽略 S3 凭据,导致 Kinesis 设置无法工作。

还要验证您确实看到了 S3 中累积的数据文件。

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

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

但这里有故障排除指南:

  • 这个过程是一个很好的起点: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
    • 美国西部(俄勒冈)52.89.255.224/27
    • 欧盟(爱尔兰)52.19.239.192/27
  • 仔细检查你给 Firehose
  • 的红移 user/password
  • 此时,您应该能够在 Redshift 日志中看到连接尝试:

    select * from stl_connection_log where remotehost like '52%' order by recordtime desc;  
    
  • 检查 Firehose 使用的 Redshift 用户是否对目标有足够的权限 table :

    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;
    
  • 然后可以查看COPY命令是不是运行 :

    select * from stl_query order by endtime desc limit 10;
    
  • 然后检查加载错误,或者服务器错误:

    select * from stl_load_errors  order by starttime desc;
    select * from stl_error where userid!=0 order by recordtime desc;
    
  • 如果您的数据或 COPY 选项存在格式问题,或者您的数据与目标列不匹配,您至少应该看到 COPY 尝试和一些加载错误。

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

想要 post 我的案子给在这里迷路的人。

我们通过此处 post 的说明强制对我们的 S3 存储桶进行服务器端加密调用:http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html

在 Firehose 使用的存储桶上使用此策略的问题是 Firehose 会创建未加密的清单文件 以及加密的数据文件。如果此策略到位,清单文件将不会在 S3 上创建,因此不会触发 Redshift 加载。所以我们的行为显示数据到达存储桶,但没有清单文件,因此没有数据加载。