首页 > 解决方案 > 从包含大量文件的 s3 存储桶读取时,AWS Glue 作业在 create_dynamic_frame_from_options 失败

问题描述

我的 s3 存储桶中的数据如下所示... s3://bucketName/prefix/userId/XYZ.gz

大约有 2000 万用户,在每个用户的子文件夹中,将有 1 - 10 个文件。

我的胶水工作是这样开始的......

datasource0 = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://bucketname/prefix/"], 'useS3ListImplementation':True, 'recurse':True, 'groupFiles': 'inPartition', 'groupSize ':100 * 1024 * 1024},格式="json",transformation_ctx = "datasource0")

如上所示,我尝试了许多优化,例如 groupFiles、groupSize 和 useS3ListImplementations。

我正在使用 G.2X 工作实例为作业提供最大内存。

但是,该作业在第一行始终失败,出现“SDKClientException,无法执行 HTTP 请求:不支持的记录版本 Unknown-0.0”,并且在启用 useS3ListImplementations 时出现“无法执行 HTTP 请求:握手期间收到 close_notify”错误。

从监控中,我观察到这个作业只使用了一个执行器,虽然我已经分配了 10 个(或者在某些运行中是 20 个),并且驱动程序内存增长到 100%,CPU 徘徊在 50% 左右。

我了解我的 s3 文件夹的组织方式不是最好的。鉴于这种结构,有没有办法使这种胶水工作起作用?

我的目标是一次性将这些历史文件夹中的 json 数据转换为镶木地板。也欢迎任何更好的方法来实现这一点。

标签: apache-sparkamazon-s3parquetaws-glue

解决方案


推荐阅读