请参考以下已经问过的问题: Write 100m files to s3 and Too many open files in EMR
这里处理的数据大小至少在 4-5TB 左右。准确地说 - 300GB 使用 gzip 压缩。
随着这一步随着时间的推移聚合数据,输入的大小将逐渐增长。
例如,截至 2012 年 12 月的日志将包含:
UDID-1, DateTime, Lat, Lng, Location
UDID-2, DateTime, Lat, Lng, Location
UDID-3, DateTime, Lat, Lng, Location
UDID-1, DateTime, Lat, Lng, Location
为此,我们必须以 UDID(唯一设备标识符)作为文件名生成单独的文件,并在文件中按排序顺序生成属于该 UDID 的记录。
前任:
UDID-1.dat => File Contents
DateTime1, Lat1, Lng1, Location1
DateTime2, Lat2, Lng2, Location2
DateTime3, Lat3, Lng3, Location3
现在,当我们有 2013 年 1 月的日志时,此步骤将读取旧数据、此步骤已为较早月份生成的文件以及较新的日志以聚合 UDID 的数据。
前任:
If the logs for month of Jan has a record as: UDID-1, DateTime4, Lat4, Lng4, Location4, the file UDID-1.dat would need to be updated with this data. Each UDID's file should be chronologically sorted.
对于这一步,我们考虑将数据写入 EBS 卷并保持原样以供以后使用。但是 EBS 卷有 1TB 的限制。正如在引用的问题中已经提到的,直接在 s3 上生成文件或在 HDFS 上生成然后移动到 s3 对这个用例来说不是一个可行的选择,因为大约有 1 亿个小文件需要移动。即使使用 s3distcp,移动如此大量的文件也太慢了。
因此,接下来我们将尝试 s3fs——由 Amazon S3 支持的基于 FUSE 的文件系统。有谁知道 s3fs 的可扩展性如何?能处理1亿个小文件吗?将分布在 1 亿个文件中的 3-5TB 数据从 s3 移动到本地文件系统以供 MR 作业使用需要多长时间?以及将数据移回 s3 需要多长时间?它是否会遇到与使用 s3distcp 时遇到的问题相同的问题?
提前致谢 !