使用 AWS Glue 爬虫进行智能采样

Posted

技术标签:

【中文标题】使用 AWS Glue 爬虫进行智能采样【英文标题】:Smart sampling with AWS Glue Crawlers 【发布时间】:2019-10-21 13:57:57 【问题描述】:

我的 s3 存储桶上有几张桌子。这些表在内存大小和文件数量上都很大,它们存储在 JSON 中(我知道不是最理想的)并且有很多分区。

现在我想启用 AWS Glue 数据目录和 AWS Glue Crawlers,但是我对遍历所有数据的爬虫程序的价格感到害怕。

架构不会经常更改,因此无需遍历 S3 上的所有文件。

默认情况下,爬虫会遍历所有文件吗?是否可以配置一个更智能的采样策略,只查看部分文件而不是所有文件?

【问题讨论】:

您是使用 Glue Crawler 进行“模式更改检测”还是仅用于新添加数据集的“新分区检测”?如果是在第一次使用爬虫进行“模式检测”后对新添加的数据集进行“新分区检测”,您可以使用 Athena Boto3 API 添加分区,而无需运行爬虫。 这是一个不错的技巧,我以前用过。但是架构更改经常发生。 那么这会很棘手,因为您需要注意在爬虫期间考虑所有模式更改,否则爬虫将无法检测到所有模式更改,从而使 Glue 数据目录变得混乱。如果您希望进行选择性爬网,如@Eman 所述,您可以使用排除路径(不幸的是,Glue 不提供包含路径:()但是这样做时,您必须包含所有可能具有架构更改的路径..e.g.架构更改发生在 2019 年 10 月 10,15,20 日,那么它必须包含在爬虫路径中,并且爬虫每次都必须爬过这些数据集。继续...1/2 老实说,它使爬虫的目的无效,因为您必须明确知道架构更改。 ... 2/2 理想情况下,我会想象爬虫会遍历 5% 的随机选择的文件。这将以相对较高的概率覆盖所有更改,同时显着降低扫描成本。 【参考方案1】:

根据您的存储桶结构,也许您可​​以使用排除路径并将爬虫指向您想要爬取的特定前缀。如果分区是 hive 风格的分区,那么你可以利用 Athena 执行 msck repair table 来添加分区。或者,您可以在 Athena 中手动创建表并运行 msck repair,如果您有很多分区并且文件很大,那么这肯定会花费很长时间。

【讨论】:

以上是关于使用 AWS Glue 爬虫进行智能采样的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue - boto3 爬虫未创建表

AWS Glue 无法从爬虫创建数据库:权限被拒绝

在 Amazon Redshift 日志上运行 AWS Glue 爬虫会创建大量表

在 AWS X-Ray 控制台中配置采样规则

爬虫可以更新 AWS Glue 中导入的表吗?

针对 AWS EMR 的 AWS Glue 定价