使用AWS Firehose时串联s3文件

Ben*_*ier 5 amazon-s3 amazon-web-services amazon-redshift amazon-kinesis amazon-kinesis-firehose

我有一个AWS Kinesis Firehose流,使用以下配置将数据放入s3中:

S3 buffer size (MB)*       2
S3 buffer interval (sec)*  60
Run Code Online (Sandbox Code Playgroud)

一切正常。唯一的问题是Firehose为每个数据块创建一个s3文件。(以我为例,每分钟一个文件,如屏幕截图所示)。随着时间的流逝,会有很多文件:每天1440个文件,每年525k文件。

在此处输入图片说明

这很难管理(例如,如果我想将存储桶复制到另一个存储桶,则需要一个接一个地复制每个文件,这将花费一些时间)。

两个问题:

  • 有没有办法告诉Kinesis将旧文件分组/连接在一起。(例如,每天超过24小时的文件会一天被分成几大块)。
  • COPY从大量s3文件(而不是几个)中进行复制时,COPY红移性能如何受到影响?我没有精确地测量这一点,但是根据我的经验,使用许多小文件的性能会很差。我记得在使用大文件时,大约200万行的COPY约为1分钟。200万行包含许多小文件(〜11k文件),最多需要30分钟。

我的两个主要问题是:

  • 更好的红移COPY性能(从s3开始)
  • 整体s3文件管理更轻松(备份,任何形式的操作)

E.J*_*nan 5

最简单的解决方法是增加firehose缓冲区的大小和时间限制-最多可以增加15分钟,这会将每天的1440个文件减少到每天96个文件(当然,除非您达到文件大小限制) )。

除此之外,Kinesis中没有任何内容可以为您合并文件,但是您可以设置一个S3生命周期事件,该事件在每次创建新的Kinesis文件时触发,并向其中添加一些您自己的代码(可能在EC2上运行或无服务器运行)与Lambda)并自行进行串联。

无法评论redshift的加载性能,但是我怀疑这不是什么大问题,即使它已经成为-或将要成为其中一个,我怀疑AWS会对性能有所帮助,因为这是他们设置的使用模式。