AWS 有多个公共“大数据”数据集可用。有些数据免费托管在 EBS 上,其他数据(例如 NASA NEX 气候数据)托管在 S3 上。我发现了关于如何使用 EBS 中托管的数据的更多讨论,但无法以足够合理的速度在 EC2 中获取 S3 数据集来实际处理数据。
所以我的问题是将公共大数据集(~256T)“放入”EC2。我尝试的一种方法是将公共 S3 安装到我的 EC2,如 在本教程中。然而,当尝试使用 python 来评估这些已安装的数据时,处理时间非常非常慢。
我开始认为利用 AWS CLI(
cp
或 sync
)可能是正确的方法,但我仍然很难找到与大型公共 S3 数据集相关的文档。
简而言之,安装使用 AWS 的 S3 公共大数据集的最佳方式是 CLI 更好吗?这是 EMR 问题,还是问题完全在于实例大小和/或带宽?
通常借助 Apache Hadoop(作为 Amazon EMR 服务的一部分提供)等分布式处理工具来分析非常大的数据集。 Hadoop 可以在多个服务器(节点)之间拆分处理,通过并行工作实现更好的速度和吞吐量。
我查看了其中一个数据集目录并找到了这些文件:
$ aws s3 ls s3://nasanex/NEX-DCP30/NEX-quartile/rcp26/mon/atmos/tasmax/r1i1p1/v1.0/CONUS/
2013-09-29 17:58:42 1344734800 tasmax_ens-avg_amon_rcp26_CONUS_200601-201012.nc
2013-10-09 05:08:17 83 tasmax_ens-avg_amon_rcp26_CONUS_200601-201012.nc.md5
2013-09-29 18:18:00 1344715511 tasmax_ens-avg_amon_rcp26_CONUS_201101-201512.nc
2013-10-09 05:14:49 83 tasmax_ens-avg_amon_rcp26_CONUS_201101-201512.nc.md5
2013-09-29 18:15:33 1344778298 tasmax_ens-avg_amon_rcp26_CONUS_201601-202012.nc
2013-10-09 05:17:37 83 tasmax_ens-avg_amon_rcp26_CONUS_201601-202012.nc.md5
2013-09-29 18:20:42 1344775120 tasmax_ens-avg_amon_rcp26_CONUS_202101-202512.nc
2013-10-09 05:07:30 83 tasmax_ens-avg_amon_rcp26_CONUS_202101-202512.nc.md5
...
该目录中的每个数据文件为 1.3GB(连同一个 MD5 文件,用于通过校验和验证文件内容)。截至 2023 年 8 月 9 日,
CONUS
文件夹包含 152 个文件 (~95GB)。
我下载了以下文件之一:
$ aws s3 cp s3://nasanex/NEX-DCP30/NEX-quartile/rcp26/mon/atmos/tasmax/r1i1p1/v1.0/CONUS/tasmax_ens-avg_amon_rcp26_CONUS_200601-201012.nc .
Completed 160 of 160 part(s) with 1 file(s) remaining
aws s3 cp
命令使用分段下载来检索文件。根据您的互联网连接速度,这可能需要几秒钟。
结果是一个可以通过Python访问的本地文件:
$ ls -l
total 1313244
-rw-rw-r-- 1 ec2-user ec2-user 1344734800 Sep 29 2013 tasmax_ens-avg_amon_rcp26_CONUS_200601-201012.nc
它采用
.nc
格式,我认为这是 NetCDF。
考虑到 EBS 数据卷的最大大小为 16TiB,我建议根据您的卷大小一次处理几个文件。
如果您喜欢用 pandas 进行分析,请考虑 DASK!上面提到 EMR 或 Spark 的评论确实有正确的想法。您需要几台“机器”来处理这么多数据。 Dask 就像 pandas,但允许您跨多个服务器处理数据帧。
EMR 和 Spark 集群需要大量时间和资源来设置和维护。也有例外,但如果您没有经验或团队,请考虑 Dask。
Dask 对于 Python/Pandas 开发人员来说更自然,并且允许处理 PB 级的数据。此外,还可以使用新方法在 S3 中的 Fargate 容器上运行它。最常见的模式是使用 Dask 进行转换,然后可以使用 Dask 数据帧进行所有分析或将它们拉入 Pandas 数据帧。
本文很好地解释了如何在 AWS 中快速设置 Dask 集群。 https://towardsdatascience.com/bootstrapping-dask-on-1000-cores-with-aws-fargate-1e1b7fd1a32c
使用完毕后请记住删除集群。