使用NiFi进行S3分段上传

时间:2019-06-14 13:43:53

标签: amazon-s3 apache-nifi

我正在从关系数据库中将大量数据摄取到AWS S3中。由于容量很大,因此我通过多个SQL拉取对其进行分解,创建较小的流文件,然后合并然后上传到AWS S3。有没有一种方法可以将这些文件块上传到AWS S3,然后在完成针对该特定表的所有上传之后进行最终合并?

我正在使用的PutS3Object处理器具有分段上传选项,但在我看来,此方法首先希望大文件首先在本地创建,然后按块加载。我的理解正确吗?我试图避免在上传之前将较小的流文件合并为一个的步骤。

2 个答案:

答案 0 :(得分:0)

PutS3Object处理器使用putObject方法或分段上传方法将文件上传到AWS S3。在后台,这两种方法都可作为适用于Java的AWS开发工具包的一部分使用。

Amazon S3提供以下选项:

  • 通过单个操作上传对象​​-通过单个PUT操作,您可以 最多可以上传5 GB的对象。
  • 上传零件中的对象-使用 分段上传API,您可以上传最大5 TB的大对象。

在PutS3Object处理器中,分段上传仅在文件大小大于使用'分段阈值'属性设置的阈值大小时启动。 如果文件大小小于阈值大小,则无法进行分段上传。

  

是否可以将这些文件块上传到AWS S3,然后在完成针对该特定表的所有上传之后进行最终合并?

可能有一些方法,但不使用PutS3Object处理器。实际上,AWS S3分段上传API在使用时的工作方式如下:拆分较大的文件,分块上传并最后合并。

  

我要通过多个SQL拉力来分解它,创建较小的流文件,然后合并然后上传到AWS S3

一种可能的方法是,如果可能的话,用整个关系数据库数据创建一个较大的流文件,而不是创建较小的流文件,并让PutS3Object处理器处理文件上传。

分段上传包括三个步骤:启动上传,上传部分并完成上传。此过程可保存状态,并在每个步骤之后在本地跟踪上传ID和上传的零件,以便在停止或重新启动处理器或群集后,可以以最小的损失恢复大的上传。

希望这个答案可以解决您的查询。

答案 1 :(得分:0)

我建议您拆分记录,并在末尾附加一个变量,以指示该拆分中是哪个文件。然后依次将所有内容上传到s3。