我的主要目的是根据每条记录的 id 将记录拆分成文件,现在有超过 150 亿条记录,肯定会增加。我需要使用 Amazon EMR 的可扩展解决方案。我已经为具有大约 9 亿条记录的较小数据集完成了这项工作。
输入文件为 csv 格式,其中一个字段需要是输出中的文件名。所以说有以下输入记录:
awesomeId1, somedetail1, somedetail2
awesomeID1, somedetail3, somedetail4
awesomeID2, somedetail5, somedetail6
因此,现在应该有 2 个文件作为输出,一个名为awesomeID1.dat
,另一个为awesomeID2.dat
,每个文件都有与各自 ID 相关的记录。
输入大小:每月总计 600 GB(gzippef 文件的大小),每个文件约为 2 3 GB。我需要一次处理大约 6 个月或更长时间。所以总数据大小为 6*600 GB(压缩)。
以前我在根据 id 值写入 s3Too many open files
时遇到错误。FileByKeyTextOutputFormat extends MultipleTextOutputFormat<Text, Text>
然后正如我在这里解释的那样,我没有将每个文件都直接写入 s3,而是将它们写入本地并分批 1024 个文件移动到 s3。
但是现在随着数据量的增加,我收到了来自 s3 的以下消息,然后它跳过了写入有问题的文件:"Please reduce your request rate."
此外,我必须在具有 200 台 m1.xlarge 机器的集群上运行,这需要大约 2 小时,因此它也很贵!
我想要一个可扩展的解决方案,如果将来数据量再次增加,它不会失败。
有什么建议么?