将1亿个文件写入s3

vh0rcniy  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(542)

我的主要目标是根据每个记录的ID将记录分割成文件,现在有超过150亿条记录,当然可以增加。我需要一个可扩展的解决方案使用亚马逊电子病历。我已经为一个有大约9亿条记录的较小的数据集完成了这项工作。
输入文件采用csv格式,其中一个字段必须是输出中的文件名。假设有以下输入记录:

awesomeId1, somedetail1, somedetail2
awesomeID1, somedetail3, somedetail4
awesomeID2, somedetail5, somedetail6

所以现在应该有两个文件作为输出,其中一个名为 awesomeID1.dat 以及其他 awesomeID2.dat ,每个都有与各自id相关的记录。
输入大小:每月总共600 gb(gzippef文件大小),每个文件大约2.3 gb。我需要一次处理6个月或更长时间。所以总的数据大小将是6*600GB(压缩)。
以前我 Too many open files 使用时出错 FileByKeyTextOutputFormat extends MultipleTextOutputFormat<Text, Text> 根据id值写入s3。然后,正如我在这里解释的那样,我没有将每个文件直接写入s3,而是在本地编写它们,并将它们以1024个文件的批处理方式移动到s3。
但是现在随着数据量的增加,我从s3得到了以下消息,然后它跳过了编写有问题的文件: "Please reduce your request rate." 另外,我必须在一个集群上运行200 m1.xlarge机器,然后需要大约2小时,因此它是非常昂贵的!
我想有一个可扩展的解决方案,这将不会失败,如果数据量在未来再次增加。
有什么建议吗?

3lxsmp7m

3lxsmp7m1#

以下是有关减速错误的一些信息:https://forums.aws.amazon.com/message.jspa?messageid=89722#89816 你应该按字母顺序插入s3。此外,限制是动态的,并随着时间的推移重新调整,所以放慢速度,并尝试提高您的速度后。
也许使用数据库比使用文件系统更好?整个数据集有多大?
dynamodb可能很合适,但可能贵到1美元/gb/月(因为它使用ssd作为备份存储。)
rds是另一种选择。其定价为每月0.10美元/gb。
更好的做法可能是在ec2上托管自己的nosql或其他数据存储,例如在新的hs1.8x1大型示例上。您只能在需要时启动它,不需要时将其备份到s3。

相关问题