apache-spark - 从包含大量文件的 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 数据转换为镶木地板。也欢迎任何更好的方法来实现这一点。
解决方案
推荐阅读
- alert - 从javascript中的下拉函数读取变量
- python - Python numpy / pandas 中 nans 的行为不一致
- java - 如何在链表java中的第一个元素前面添加一个点?
- perl - perl 打印到文件和 STDOUT 这是文件
- angular - NGXS:需要在状态改变时调用方法
- c++ - 使用 Boost.PropertyTree 从 XML 中读取一组值
- python - 在 Pandas 中获取颜色格式的表格
- javascript - 改变两个字符串之间差异的颜色?
- woocommerce - 从 Woocommerce 订单中获取订阅 ID
- excel - MYVLOOKUP 用于查找部分匹配的多个值并将它们拟合到一个单元格中