19

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

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

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

  • 在指标 DeliveryToRedshift Success 为 0(DeliveryToRedshift Records 为空)
  • 加载日志(redshift Web 控制台)和 STL_LOAD_ERRORS 表为空。
  • 我检查了 Firehose 是否能够连接到 Redshift(我在 STL_CONNECTION_LOG 中看到了连接)

我该如何解决这个问题?

4

4 回答 4

41

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

但这里有故障排除指南:

  • 一个好的起点是这个过程:http ://docs.aws.amazon.com/firehose/latest/dev/troubleshooting.html
  • 检查数据是否到达 S3
    • 必须有一个 IAM 角色才能进行 firehose 交付,并且 firehose 服务与此角色之间存在信任关系
    • 此 IAM 角色必须具有 S3 访问策略
    • 在此处查看政策 json: http ://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-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 的红移用户/密码
  • 此时,您应该能够在 Redshift 日志中看到连接尝试:

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

    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 尝试和一些加载错误。

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

于 2015-12-11T10:56:14.190 回答
7

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

AmazonS3FullAccess
AmazonRedshiftFullAccess
AmazonKinesisFullAccess
AmazonKinesisFirehoseFullAccess

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

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

于 2015-12-10T18:21:11.983 回答
6

想为在这里迷路的人发布我的案例。

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

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

于 2017-08-11T21:17:19.537 回答
1

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

于 2015-12-10T20:56:02.660 回答