繁体   English   中英

AWS Kinesis Firehose 未在 Redshift 中插入数据

[英]AWS Kinesis Firehose not inserting data in Redshift

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

消防软管 stream 正在工作并将数据放入 S3。

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

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

我该如何解决这个问题?

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

但这是故障排除指南:

  • 一个很好的起点是这个程序: http//docs.aws.amazon.com/firehose/latest/dev/troubleshooting.html
  • 检查数据是否到达S3
    • firehose交付必须具有IAM角色,并且firehose服务与此角色之间存在信任关系
    • 此IAM角色必须具有S3访问策略
    • 请参阅此处的政策jsons: 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控制台相关的一些错误。 (这一步对我有用)

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

AmazonS3FullAccess
AmazonRedshiftFullAccess
AmazonKinesisFullAccess
AmazonKinesisFirehoseFullAccess

有一个错误忽略了IAM中的S3凭据,使得Kinesis安装程序无法工作。

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

想要为在这里失踪的人发布我的案子。

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

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

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

如果有多个源将数据流式传输到同一个 firehose,并且您正在通过测试数据进行测试,那么您的演示数据的 json 文本可能会被修改,并且它与红移表模式不匹配,因此它不会将数据加载到红移表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM