如何减少使用 AWS Glue 将 parquet 文件写入 s3 所需的时间

2024-06-20

我正在创建一个胶水作业,需要处理来自 s3 路径的每日 4TB 数据量 -s3://<path>/<year>/<month>/<day>/<hour>/。因此,我创建了一个循环,按每小时文件夹(每个 155Gb)将数据读入 Spark df,过滤某些类别,并作为按过滤类别分区的镶木地板文件写回 s3(s3://<path>/category=<category>/year=<year>/month=<month>/day=<day>/hour=<hour>/)。我使用 60 个 G2.X 工作节点,每个节点有(8 个 vCPU、32 GB 内存、128 GB 磁盘)。 S3写入速度极慢,需要10多个小时才能完成。除了增加节点数量之外,是否有办法加快/优化 s3 写入?


def s3_load_job(input_list):

    hour, year, month, day = input_list
    logger.info(f"hour in s3 func {hour}")
    
    # get data from s3
    s3_path = f"s3://<path>/{year}/{month}/{day}/{hour}/"
    logger.info(f"print s3 path {s3_path}")

    #user defined library function that return spark df
    df = get_df_from_s3(glueContext, s3_path)

    df = df.withColumn('category', F.lower(F.col('category')))

    df_rep = df.where(F.col('category').isin({ "A", "B", "C","D"}))

    #write to s3
    datasink4 = DynamicFrame.fromDF(df_rep, glueContext, "datasink4")
    
    glueContext.write_dynamic_frame.from_options(frame = datasink4,
                                                             connection_type = "s3",
                                                             connection_options = 
                                                             {"path":"s3://<path>/"
                                           ,"partitionKeys"["category","year","month","day","hour"]}
                                                             ,format = "glueparquet" )



def main():
    
    year = '2020'
    month = '08'
    day = '01'
    hours = ["%.2d" % i for i in range(24)]

    input_list = [[hour, year, month, day] for hour in hours]
    logger.info(f"input_list {input_list}")

    for i in input_list:
        s3_load_job(i)
    
    job.commit()



if __name__ == "__main__":
    main()            
       


看来你一定已经找到了处理这个问题的方法了。 想分享对我有用的东西。我每小时运行一次胶水作业,启用作业书签以不重新处理旧文件。确保您没有创建太多分区,这不仅会导致更长的执行时间,而且如果您想通过 Athena 进行查询,从长远来看,您的查询可能会超时。将分区保持在最低限度。通过重新分区,您的作业可能会花费太多时间来整理数据,这可能会增加作业运行时间。 然而,每小时频繁跑步可能会有所帮助。 请分享对您有用的方法。

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

如何减少使用 AWS Glue 将 parquet 文件写入 s3 所需的时间 的相关文章

随机推荐

  • 如何在aspx页面中的repeater ItemDataBound函数中传递Control.ClientID?

    我想调用 JavaScript 函数来折叠 展开 我在 asp repeater 中使用此代码ItemTemplate在跨度上 onclick javascript funCollExp this 我该如何通过Control ClientI
  • JavaScript 并行性

    好吧 首先我想说我在互联网开发领域还是个新手 无论如何 我想知道是否可以使用 javascript 并行运行两段代码 我真正需要的是调用远程服务器中的两个方法 我为两者传递了一个回调函数 该函数将在我想要的数据准备好后立即执行 由于运行这些
  • 无法访问azure webapp url

    实际上 我创建了一个 Web 应用程序并成功将我的代码部署到该 Web 应用程序中 但是当我尝试通过 URL 访问该 Web 应用程序时 它显示如下 您无权查看此目录或页面 我不知道为什么会这样 我尝试创建不同的网络应用程序 但仍然重复同样
  • git am 和 git apply 有什么区别?

    Both git am https git scm com docs git am and git apply https git scm com docs git apply可用于应用补丁 看起来git am自动提交 而git apply
  • wpf,如何限制TextBox的MaxLength?

  • 为什么从网上下载Git 2.0,总是得到1.9.4的安装包?

    为什么从网上下载Git 2 0 总是得到1 9 4的安装包 为什么你不能在互联网上的任何地方找到一个不仅标记为 2 0 而且你下载的安装存档也标记为这样的 Git 安装程序包 例如 这个2 1 3 站点 http git scm com d
  • 内置函数将每个单词的第一个字母大写

    如果 SQL Server 中已存在此类函数 我不想为此创建自定义函数 输入字符串 This is my string to convert预期输出 This Is My String To Convert SET ANSI NULLS O
  • 双向链表转 JSON

    我有一个三维结构 实际上是一个具有六个节点的双向链表 即左 右 上 下 进 出 如果一个节点位于另一个节点的右侧 那么该节点将毫无疑问位于第一个节点的左侧 喜欢 实际上这是一个 3D 结构 但为了便于理解 我给出了一个 2D 示例 现在我必
  • 如何在没有分页装饰的情况下渲染 ngTable?

    在我的小型 AngularJS 应用程序中 我使用 ngTable 库渲染多个表格 只有一个可以使用分页 其他的内容总是少于一页 每个渲染的 ngTable 似乎都在表格下方添加了 10 25 50 100 选择器 对于我的大多数桌子来说
  • 具有可变填充的 D3 包布局

    我无法使用 d3 layout pack padding 获得变量填充 我想在组和叶节点处放置不同的填充 d3 layout pack sort null size this width this height children funct
  • 文件显示在 Visual Studio 的解决方案资源管理器中,并带有快捷方式图标。这意味着什么?

    我已经下载了FParsec的库源代码 所有文件都带有快捷方式符号 这是什么意思 当该项目添加到该项目时 它被添加为链接Project gt Add Existing Item gt Add as Link 该文件很可能托管在目录结构中的另一
  • Java:外观和感觉

    I am using Netbeans on a Windows machine what happens is that if I run the main java file the look and feel I get is dif
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • Git撤销本地分支删除

    我刚刚删除了错误的分支 并进行了一些我需要的实验性更改git branch D branchName 如何恢复分支 您可以使用git reflog http git scm com docs git reflog查找分支最后一次提交的 SH
  • 由于 MIME 类型不受支持,拒绝应用样式

    我不断收到一条错误消息 指出 MIME 类型 text html 不可执行或不是受支持的样式表 MIME 类型 并且启用了严格的 MIME 检查 我的链接代码是
  • 如何在 Binding Adapter 中将此 java 代码写入 kotlin

    我在 lang java 中的 onBindViewHolder 中编写了一些代码行 我试图在 Binding Adapter 中的 kotlin 中编写确切的代码 但我无法编写该代码 地震适配器 JAVA 我尝试过 但无法编写相同的代码来
  • IntelliJ IDEA - 跟踪解决方案资源管理器中的活动项目

    我试图在 IDEA 中找到一个不错的 VS 功能 在解决方案资源管理器中跟踪活动项目 模拟 对于那些不知道的人 当我在主区域中的文件之间切换时 VS 将突出显示解决方案资源管理器中的相应项目 IDEA 中的 项目 窗格 自 2020 1 版
  • 弹簧隔离支持吗? SQL快照隔离

    我们正在使用 SQL Server 快照隔离可能是提高性能和解决一些死锁问题的好方法 假设我们确实需要更改为快照隔离 我似乎找不到一种简单的方法来在 Springs 上启用快照隔离 Transactional 我发现以下 hibernate
  • 由于无法加载主类错误,无法运行 JAR 文件

    我构建了我的项目并使用 Gradle 构建框架生成了一个 JAR 文件 但是 输出 jar 文件无法从主类加载主要方法 矿工追踪器 在这种情况下 正如我提到的 与 jar选项失败 java jar Backtracker jar Error
  • 如何减少使用 AWS Glue 将 parquet 文件写入 s3 所需的时间

    我正在创建一个胶水作业 需要处理来自 s3 路径的每日 4TB 数据量 s3