将 1 亿个文件写入 s3

2023-12-31

我的主要目标是根据每条记录的 id 将记录拆分为文件,目前有超过 150 亿条记录,而且肯定还会增加。我需要一个使用 Amazon EMR 的可扩展解决方案。我已经为一个包含大约 9 亿条记录的较小数据集完成了这项工作。

输入文件采用 csv 格式,其中一个字段需要是输出中的文件名。 假设有以下输入记录:

awesomeId1, somedetail1, somedetail2
awesomeID1, somedetail3, somedetail4
awesomeID2, somedetail5, somedetail6

所以现在应该有 2 个文件作为输出,其中一个名为awesomeID1.dat和其他如awesomeID2.dat,每个都有与各自 ID 相关的记录。

输入大小:每月总计 600 GB(gzippef 文件大小),每个文件约为 2 3 GB。我一次需要处理大约 6 个月或更长时间。因此总数据大小将为 6*600 GB(压缩后)。

以前我得到Too many open files我使用的时候报错FileByKeyTextOutputFormat extends MultipleTextOutputFormat<Text, Text>根据id值写入s3。然后正如我所解释的here https://stackoverflow.com/questions/12953251/too-many-open-files-in-emr,我没有将每个文件直接写入 s3,而是在本地写入,然后以 1024 个文件为一批批量移动到 s3。

但现在随着数据量的增加,我从 s3 收到以下消息,然后它会跳过写入有问题的文件:"Please reduce your request rate."另外,我必须在包含 200 台 m1.xlarge 机器的集群上运行,这需要大约 2 小时,因此成本也非常高!

我想要一个scalable如果将来数据量再次增加,该解决方案不会失败。

有什么建议么?


以下是有关 SlowDown 错误的一些信息:https://forums.aws.amazon.com/message.jspa?messageID=89722#89816 https://forums.aws.amazon.com/message.jspa?messageID=89722#89816您应该按字母顺序插入到 S3 中。此外,限制是动态的,会随着时间的推移重新调整,因此放慢速度并稍后尝试提高速率。

也许使用数据库比文件系统更好?总数据集有多大?

DynamoDB 可能是一个不错的选择,但可能价格昂贵,为 1 美元/GB/月。 (因为它使用 SSD 作为后备存储。)

RDS 是另一种选择。其定价为 0.10 美元/GB/月起。

更好的可能是在 EC2 上托管您自己的 NoSQL 或其他数据存储,例如在新的 hs1.8xlarge 实例上。您可以仅在需要时启动它,并在不需要时将其备份到 S3。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 1 亿个文件写入 s3 的相关文章

随机推荐

  • 在共享 Web 服务器上安装 PDFTK

    我的网站托管在 Total Choice Hosting 上 使用某种 Linux 我不知道具体是什么品种 和 Apache 我没有命令行访问权限 我只能通过 PHP 中的 exec 或通过 CRON 作业运行命令行程序 我可以在这样的系统
  • Web 服务代理设置

    在c 4 0 中 我有一个名为ManufacturerContactDetails 的Web 服务 我使用以下命令从 Windows 应用程序调用该 Web 服务 var ws new ManufacturerContactDetailsW
  • 从 TypeScript 扩展数组

    我在下面的代码中做错了什么 我正在尝试延长Array在我的课堂上MyNumberList然后尝试使用它 我看到的是 似乎没有任何项目被添加到列表中 我得到一个undefined当我尝试访问列表元素时 P S 我正在使用 TypeScript
  • 使用单独的数据库进行 papertrail 版本控制

    我正在尝试使用 papertrail 将模型的更改事件记录在单独的数据库中 我在用着 导轨 4 1 2 Ruby 2 1 纸迹 4 0 0 下面是我在关注点中添加的代码 module Foo class Base lt ActiveReco
  • 在 Pyspark 中将列类型从字符串更改为日期

    我正在尝试将列类型从字符串更改为日期 我咨询过以下人士的答案 如何将 DataFrame 中的列类型从字符串更改为日期 https stackoverflow com questions 36948012 how to change the
  • 删除了配置门户中的团队配置配置文件:*,该怎么办?

    我不小心删除了配置门户中的团队配置配置文件 我现在应该做什么 我有一台安装了 Xcode 4 2 的 MacBook 我还在 熟悉 iOS 配置门户和 Xcode 的过程中删除了 iOS 团队配置配置文件 我没有成功地恢复它 无论是从 Xc
  • 如何使用 TestCafe 和 Yaml 将屏幕截图和视频保存为 Azure Build Pipeline 中的附件?

    我正在尝试在 Azure Devops 中创建一个构建管道 运行在 TestCafe Studio 中创建的测试 保存错误屏幕截图 并保存每次测试的视频 保存测试运行的视频 将测试结果发布到测试运行 将屏幕截图和视频作为附件发布到构建管道和
  • 在经典 ASP 脚本中使用 ADO.NET

    我正在编写一些返回单个值的简单查询 并且我想从经典 ASP 的 ADO 库中获取 ADO NET ExecuteScalar 方法的行为 但是 我不想重新发明轮子 是否可以在经典 ASP 中实例化 ADO NET 的 Command 对象
  • 码头工人。 MySQL 图像。无法更改 my.cnf 文件

    我有这样一个docker compose yml database container name test db image mysql 5 7 volumes docker my cnf etc my cnf environment MY
  • 如何检测 NSString 是否包含特定字符?

    我有一个 NSString 对象 例如 45 0000 现在我想知道这个字符串是否包含 我怎样才能做到这一点 您是否想查找它是否至少包含以下一项 or 您可以使用 rangeOfCharacterFromSet NSCharacterSet
  • 复制没有历史记录的 git 存储库

    我在 GitHub 上有一个私人存储库 我想将其公开 但是 一些初始提交包含我不想公开的信息 硬编码凭据等 在不包含部分或全部提交历史记录的情况下 公开最新提交 我真的不需要或不希望公共存储库中的先前提交 的最简单方法是什么 您可以限制历史
  • 如何在Web应用程序中使复选框只读

    我有一个网格视图 每一行都有一个复选框 当进入编辑模式时 可以选中 取消选中复选框 但我不希望该复选框在任何其他模式下都是可编辑的 用户可能很容易对不反映保存回数据库中的真实值的复选框感到困惑
  • 使用for循环批量重命名文件

    我正在尝试使用 for 循环来重命名文件 Echo Off setlocal enableDelayedExpansion Set Date set mydate DATE 10 4 DATE 4 2 DATE 7 2 Rename fil
  • 拆分逗号分隔的字符串并在 C# 中添加引号 - 优雅的解决方案

    我有一个string看起来像这样 var v 10 14 18 21 并想将其用作如下所示的东西 10 14 18 21 我写了一个函数 它将值分割为comma并将它们作为字符串添加在一起 另外我删除了最后一个 从结果字符串 我把所有东西都
  • DQL 返回实体数组而不是对象

    通常 如果我运行如下所示的 DQL 查询 它将返回实体对象列表 d this gt getDoctrine gt getRepository xxxWebsiteBundle Locations gt createQueryBuilder
  • 为什么用户可以设置新密码,而无需输入与我的批处理代码正确的旧密码?

    我最近写了一个文件夹锁定程序 我唯一的问题是当我需要更改密码时 例如我去部分newpass 该程序似乎不会将旧密码与新密码进行比较 而只是使用给定的任何输入 这违背了拥有密码的目的 因为每个人都可以更改密码 而不是用它解锁文件夹 有人可以仔
  • 在 Chrome 中重新加载动画 GIF 时出现问题

    我有一个可以重新加载 gif 动画的应用程序 它在 Safari 中始终有效 但在 Chrome 中时断时续 我相信这个问题与提到的问题类似here https groups google com forum topic shiny dis
  • Excel - 基于ID的工作表值查找[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有两张工作表 第一个列出了我的客户
  • 如何获取处理器和硬盘的制造序列号和 ID?

    如何使用 Matlab 获取以下硬件属性 主板制造序列号 处理器 ID 处理器制造序列号 硬盘ID 硬盘制造序列号 是否有任何函数或类负责检测其他机器硬件组件属性的属性 我知道可以使用系统或控制台命令来完成 但我不知道如何完成 不过 我更喜
  • 将 1 亿个文件写入 s3

    我的主要目标是根据每条记录的 id 将记录拆分为文件 目前有超过 150 亿条记录 而且肯定还会增加 我需要一个使用 Amazon EMR 的可扩展解决方案 我已经为一个包含大约 9 亿条记录的较小数据集完成了这项工作 输入文件采用 csv