2

我的主要目的是根据每条记录的 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 小时,因此它也很贵!

我想要一个可扩展的解决方案,如果将来数据量再次增加,它不会失败。

有什么建议么?

4

1 回答 1

0

以下是有关减速错误的一些信息:https ://forums.aws.amazon.com/message.jspa?messageID=89722#89816您应该按字母顺序插入 S3。此外,限制是动态的,并且会随着时间的推移重新调整,因此请放慢速度并尝试稍后提高您的速度。

也许您最好使用数据库而不是文件系统?总数据集有多大?

DynamoDB 可能很合适,但可能会很贵,每月 1 美元/GB。(因为它使用 SSD 作为后备存储。)

RDS 是另一种选择。其定价为 0.10 美元/GB/月。

更好的办法是在 EC2 上托管您自己的 NoSQL 或其他数据存储,例如在新的 hs1.8xlarge 实例上。您可以仅在需要时启动它,并在不需要时将其备份到 S3。

于 2012-12-29T11:23:48.187 回答