EMR 和 S3 上的 Delta Lake (OSS) 表 - Vacuum 需要很长时间且没有作业

2024-02-03

我正在使用开源版本将大量数据写入 Databricks Delta Lake,在 AWS EMR 上运行,并以 S3 作为存储层。我正在使用 EMRFS。

为了提高性能,我经常压缩和清理桌子,如下所示:

    spark.read.format("delta").load(s3path)
            .repartition(num_files)
            .write.option("dataChange", "false").format("delta").mode("overwrite").save(s3path)
    
    t = DeltaTable.forPath(spark, path)
    t.vacuum(24)

It's then deleting 100k's of files from S3. However, the vacuum step takes an extremly long time. During this time, it appears the job is idle, however every ~5-10 minutes there will be a small task that indicates the job is alive and doing something. Starting from task 16

我读过这篇文章Spark:作业之间的长时间延迟 https://stackoverflow.com/questions/36524945/spark-long-delay-between-jobs这似乎表明它可能与镶木地板有关?但我在增量方面没有看到任何选项来调整任何参数。


我还观察到 Delta 真空命令非常慢。开源开发人员可能无法在存储库中进行特定于 AWS 的优化,因为该库是跨平台的(需要在所有云上工作)。

我注意到真空在当地甚至很慢。您可以克隆 Delta 存储库,在本地计算机上运行测试套件,然后亲自查看。

即使您使用 AWS CLI,删除 S3 中存储的数十万个文件也很慢。您应该看看是否可以重构压缩操作以创建更少需要清理的文件。

假设您的目标是创建 1GB 文件。也许您有 15,000 个 1 GB 文件和 20,000 个小文件。现在,您的压缩操作正在重写所有数据(因此所有 35,000 个原始文件都需要在压缩后进行清理)。尝试重构代码以仅压缩 20,000 个小文件(因此清理操作只需要删除 20,000 个文件)。

真正的解决方案是构建一个针对 AWS 优化的真空命令。 Delta Lake 需要与所有流行的云和本地文件系统配合使用。制作一个开源库应该非常容易,它可以读取事务日志,找出需要删除的文件,进行高性能文件删除 API 调用,然后将一个条目写入符合 Delta 的事务日志。也许我会做那个回购;)

Here's 有关真空命令的更多信息 https://mungingdata.com/delta-lake/vacuum-command/。作为旁注,您可以使用coalesce代替repartition压实时,如此处所述 https://stackoverflow.com/questions/54218006/why-does-the-repartition-method-increase-file-size-on-disk.

编辑: 达美问题:https://github.com/delta-io/delta/issues/395 https://github.com/delta-io/delta/issues/395和公关:https://github.com/delta-io/delta/pull/416 https://github.com/delta-io/delta/pull/416

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

EMR 和 S3 上的 Delta Lake (OSS) 表 - Vacuum 需要很长时间且没有作业 的相关文章

随机推荐

  • 将 JavaScript 转换为 Groovy/Java

    我有一些 javascript 代码 Postman 需要转换以便在另一个 API 测试工具 Katalon 中使用 我在更新具有时区差异的日期时遇到错误 尝试使用 TZ 差异更新预期日期时会发生错误 原始 JavaScript Postm
  • 捕获异步 lambda 异常

    我正在 Windows 8 使用 C 上工作 并且在使用时async关键字有一种情况我似乎无法很好地处理异常 该场景涉及启动一个asynclambda 将其发布到 UI 线程上运行 执行 lambda 代码期间发生的异常会在调用线程上重新引
  • 使用 Gradle 自定义 PMD 规则

    我想在使用 gradle 构建的企业项目中使用 gradle PMD 插件 我有一个pmd rules xml文件已经可以工作 但我无法添加自己的java规则 我得到一个类未找到异常 我按照其网站上的教程进行操作 我必须将自己的规则放在哪里
  • for 循环中的 Swift 闭包

    目前我有在循环内执行闭包的代码 我想知道所有闭包何时完成执行 目前 我正在使用一个计数器 并在关闭完成时递增它 然后将其与要执行的次数进行比较 代码如下 var count 0 var noOfTimes 10 for i in 0
  • 鼠标悬停和鼠标悬停有什么区别?

    在flex中 鼠标悬停和鼠标悬停有什么区别 它首先发生鼠标悬停 然后鼠标悬停 然后鼠标移出 然后推出 这些活动什么时候最合适 来自AS3文档 http help adobe com en US FlashPlatform reference
  • 当清单中存在 `android:supportsRtl="false"` 时,如何在运行时更改 ConstraintLayout 的布局方向?

    背景 我的任务是开发一个应用程序android supportsRtl false 在其清单中 不知道为什么要这样设置 但似乎在某些地方用户可以选择方向 此外 在某些情况下它是浮动的 使用系统警报窗口权限 问题 我想要一些 Constrai
  • Android Studio 输出文本始终为“Hello from C++”

    我面临这个奇怪的问题 我创建了一个textview in activity main xml并将文本设置为 android text Oh my god But 无论我输入什么文本 应用程序屏幕中的输出都是 来自 C 的你好 In fact
  • 如何在 Visual Studio 中复制错误消息

    我刚开始使用 C 和 VS 如何复制我的错误消息 在下图中 我想复制 System Net HttpWebRequest 在菜单栏中选择 查看 并启用 错误列表 默认情况下 屏幕底部会弹出包含所有错误的错误列表 并且可以复制消息
  • R6010 abort() 已被调用

    我从这里读到了有关 substr 的内容 http www cplusplus com reference string string substr http www cplusplus com reference string strin
  • 如何让 div 元素垂直固定?

    我想要垂直但不水平固定的 div 元素 目前 我正在使用 jQuery 来更新位置top每次发生滚动时 但我不希望它看到移动 我希望它能固定不动 有没有办法做到这一点 div A div B 向下滚动 div A div B
  • 节点静态示例

    我一直在用头撞墙试图找出这段代码出了什么问题 我直接从node static github存储库示例中复制了它 但它似乎不起作用 我所做的唯一修改是公共文件的路径 以前是 public 在我的公共文件夹中 我有一个index html 但是
  • VSTS - 从发布视图中取消升级软件包版本

    我们的项目当前使用 VSTS Visual Studio Team Services 包在项目之间共享包 我们想采用发布视图 https learn microsoft com en us vsts package feeds views
  • 如何包含“resources”文件夹中的js文件(Laravel 5.5)

    我使用以下代码来包含我的 js 文件 Meta addJs admin js resources assets admin js admin app js 该文件存在 但在控制台中我看到状态 404 如果我将文件移至 公共 文件夹 一切正常
  • 升级 Xampp 以运行 php 7

    在阅读了几个关于如何将 xampp 升级到较新版本的 php 的问题后 我开始将我的版本升级到版本 7 因为我想学习 严格类型提示 我从下载了 php 7官方网站 http windows php net download 我将此下载文件夹
  • CVS:列出标签之间添加/删除的所有文件

    有没有办法列出在两个选定标签之间添加 删除到存储库的所有文件 我尝试了 cvs 历史记录 但它只显示历史记录 因为特定标签最后添加到历史文件中 命令行解决方案会更好 您可以使用cvs rdiff s r
  • 解决粘性问题的方法

    当一个软件卡住 对用户输入没有响应并且不更新其显示时 如何准确确定它正在做什么 我尝试过 oprofile 它记录了正在执行的函数 但它没有给我足够的线索 它会计算运行期间发生的所有事情 而我只需要查看样本程序卡住时发生的情况 问题可能涉及
  • 多个 SSL 域连接到一个 Azure 云服务站点

    我们有一个在 Windows Azure 云服务上运行的 Web 应用程序 地址为ourapp cloudapp net 我们创建了一条 CName 记录my ourapp com指向此云服务 该域受 SSL 保护 我们现在需要允许不同的域
  • 如何在 Inno Setup 中安装之前更改 defaultdirname 参数?

    我想更改 ssInstall 部分中的 defaultdirname 参数 我怎样才能做到这一点 有没有设置 Setup 参数的功能 以下全局对象可用 TMainForm 类型的 MainForm TWizardForm 类型的 Wizar
  • Sharepoint 字段尚未在 C# 中初始化

    我正在编写一个代码 它将遍历共享点列表中的每个列表项并查找空字段 如果发现空字段 则会通过电子邮件通知负责该列表项的人员 我在线路中遇到错误val oListItem field Title 其中指出 属性或字段尚未初始化 尚未请求或请求尚
  • EMR 和 S3 上的 Delta Lake (OSS) 表 - Vacuum 需要很长时间且没有作业

    我正在使用开源版本将大量数据写入 Databricks Delta Lake 在 AWS EMR 上运行 并以 S3 作为存储层 我正在使用 EMRFS 为了提高性能 我经常压缩和清理桌子 如下所示 spark read format de