巨大的倾斜数据,需要分区并转换为镶木地板
Huge skewed data, Need to partition and convert to parquet
我在关系数据库中有非常大的数据(未压缩的近 70TB)需要加载到 s3 中并转换为 parquet 并按年月、col1 和 col2 对数据进行分区。
这将是日常工作,我有 70 个节点集群,每个集群有 256GB 内存,64 个核心。我们正在尝试使用 spark 通过 properitery 连接器转储数据,并且转储数据非常快。它基本上以 CSV 格式转储到 S3 中的一个临时位置 chunks.Data 被转储到 64mb csv 文件的 1M 块中。
在没有分区的情况下,数据转换为 parquet 正在 3 小时内完成,包括卸载数据。
问题陈述:
根据分区的要求,我的数据是高度倾斜的,因为最近几年有 70% 的数据,其中每个 col1 和 col2 也有很大的倾斜。
当我在不分区的情况下将文件转换为 parquet 时,我收到了数千个小文件,并且多个任务因 s3-slowdown 请求率错误而失败。如果我尝试合并或重新分区数据,我会遇到 reshuffle/memory 中断问题。我试图避免在多次迭代中读取数据,因为转储数据未分区,我可能每次都读取整个 1M 文件进行过滤。
有没有办法在分区后重新分区(合并)文件?
谢谢大家的评论。我能够解决问题并达到要求。
- 我已将 Redshift 中的提取物分离到一个单独的进程中。由于 Redshift 的 JDBC 驱动程序存在多个问题。我在目前支持 Parquet 格式的 redshift 上使用了本机卸载命令。所以以parquet格式提取数据并写入s3。它已将我的数据大小从 60TB 减少到 9TB。
- 编写了一个自定义分区程序(加盐)方法并提出了一个可以平均分配数据的算法。(至少将是相等的并将巨大的分区分成相等的块)。
- 在写入之前,我使用自定义分区程序重新分区数据并写入数据。
现在整个过程在 4-5 小时内完成。
我在关系数据库中有非常大的数据(未压缩的近 70TB)需要加载到 s3 中并转换为 parquet 并按年月、col1 和 col2 对数据进行分区。
这将是日常工作,我有 70 个节点集群,每个集群有 256GB 内存,64 个核心。我们正在尝试使用 spark 通过 properitery 连接器转储数据,并且转储数据非常快。它基本上以 CSV 格式转储到 S3 中的一个临时位置 chunks.Data 被转储到 64mb csv 文件的 1M 块中。
在没有分区的情况下,数据转换为 parquet 正在 3 小时内完成,包括卸载数据。
问题陈述:
根据分区的要求,我的数据是高度倾斜的,因为最近几年有 70% 的数据,其中每个 col1 和 col2 也有很大的倾斜。
当我在不分区的情况下将文件转换为 parquet 时,我收到了数千个小文件,并且多个任务因 s3-slowdown 请求率错误而失败。如果我尝试合并或重新分区数据,我会遇到 reshuffle/memory 中断问题。我试图避免在多次迭代中读取数据,因为转储数据未分区,我可能每次都读取整个 1M 文件进行过滤。
有没有办法在分区后重新分区(合并)文件?
谢谢大家的评论。我能够解决问题并达到要求。
- 我已将 Redshift 中的提取物分离到一个单独的进程中。由于 Redshift 的 JDBC 驱动程序存在多个问题。我在目前支持 Parquet 格式的 redshift 上使用了本机卸载命令。所以以parquet格式提取数据并写入s3。它已将我的数据大小从 60TB 减少到 9TB。
- 编写了一个自定义分区程序(加盐)方法并提出了一个可以平均分配数据的算法。(至少将是相等的并将巨大的分区分成相等的块)。
- 在写入之前,我使用自定义分区程序重新分区数据并写入数据。
现在整个过程在 4-5 小时内完成。