5

请参考以下已经问过的问题: 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 时遇到的问题相同的问题?

提前致谢 !

4

1 回答 1

2

我建议不要使用 s3fs 复制大量小文件。

我曾尝试过几次从 HDFS 移动大量小文件,而 s3fs 守护进程不断崩溃。我同时使用cprsync。如果您正在进行增量更新,这会变得更加严重。一种替代方法是使用该use_cache选项并查看其行为方式。

我们已经求助于使用 s3cmd 并使用 Unixfind命令遍历每个文件。像这样的东西:

find <hdfs fuse mounted dir> -type f -exec s3cmd put {} s3://bucketname \;

您也可以尝试s3cmd sync使用以下方法:

s3cmd sync /<local-dir>/ s3://bucketname
于 2013-12-12T17:55:58.170 回答