当前位置: 首页 > 知识库问答 >
问题:

EMR和S3上的三角洲湖(OSS)表-真空需要很长时间,没有工作

秋建义
2023-03-14

我正在使用开源版本将大量数据写入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)

我已经阅读了这篇文章火花:作业之间的长延迟,这似乎表明它可能与镶木地板有关?但是我在增量端没有看到任何选项来调整任何参数。

共有2个答案

松翔
2023-03-14

在Deltalake有这个的存档

问题陈述:Deltalake真空作业需要太长时间才能完成,因为下面的文件删除逻辑是顺序的。deltalake(v0.6.1)的已知错误参考:https://github.com/delta-io/delta/issues/395

解决方案:Deltalake 团队已解决此问题

对于 v0.6.x

许多组织在生产中使用0.6.x

https://swapnil-chougule.medium.com/delta-with-improved-vacuum-patch-381378e79d1d

通过这一更改,在真空作业期间支持并行删除文件。它加快了进程

羊浩广
2023-03-14

我还观察到Delta真空指令相当慢。开源开发者在回购中进行AWS特定的优化可能会受到限制,因为这个库是跨平台的(需要在所有云上工作)。

我注意到局部真空甚至很慢。您可以克隆Delta repo,在您的本地机器上运行测试套件,并亲自查看。

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

假设您的目标是创建1GB文件。也许你有15000个单曲文件和20000个小文件。现在,您的压缩操作正在重写所有数据(因此,压缩后需要对所有35000个原始文件进行真空处理)。尝试重构代码,使其只压缩20000个小文件(因此真空操作只需要删除20000个文件)。

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

下面是关于真空命令的更多信息。作为一个附带说明,您可以在压缩时使用合并而不是repartition,如本文所述。

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

 类似资料:
  • 我需要在数据库中创建一个现有的三角洲湖表上的抽象。是否可以在Spark中基于Delta Lake表创建SQL Server类型的SQL视图?

  • 我的Mongo Collection有大约2000个文档。当使用MongoTemplate find()方法和空查询(即我需要集合中的所有文档)和实体类、集合名称时,以列表的形式返回数据需要一分钟以上。有人能帮我让查询返回更快吗??下面是我正在使用的查询。

  • 我是火花三角洲湖的新手。我正在创建三角洲表顶部的配置单元表。我有必要的jars delta-core-shaded-assembly2.11-0.1.0.jar,hive-delta2.11-0.1.0.jar;在配置单元类路径中。设置以下属性。 但是在创建表时 两个表的架构匹配。堆栈详细信息:Spark:2.4.4Hive:1.2.1 任何帮助都是非常感谢的。提前谢了。

  • 在我们的kafka broker设置中,GC平均需要20毫秒,但随机增加到1-2秒。极端情况持续9秒。这种情况的发生频率相当随机。平均每天发生15次。我尝试过使用GCEasy,但没有给出任何见解。我的内存使用率为20%,但进程仍然使用交换,尽管内存可用。感谢您对如何将其最小化的任何意见 JVM选择: GC日志:

  • 此代码用于生成excel报告。有15列,如果记录数在1000左右,生成excel表需要近10-15分钟。上面的代码有什么问题吗?如何提高性能(Excel报告生成时间减少)?

  • 我使用javamail通过IMAP协议从exchage帐户读取邮件。这些邮件是纯格式的,内容是XML。 几乎所有这些邮件的大小都很短(通常小于100Kb)。然而,有时我不得不处理大型邮件(大约10Mb-15Mb)。例如,昨天我收到一封13Mb大小的电子邮件。仅仅读它就花了50多分钟。这正常吗?有没有办法提高它的性能?代码是: 花费如此长时间的方法是。我做错了什么?有什么提示吗? 非常感谢,我的英语