大量偏斜的数据,需要分区并转换为实木复合地板

时间:2019-11-23 22:12:38

标签: apache-spark pyspark apache-spark-sql parquet

我在关系数据库中有非常大的数据(近70TB未压缩),需要在s3中加载并转换为镶木地板,并按年份,月份,col1和col2对数据进行分区。

这将是日常工作,我有70Node集群,每个集群有256GB Ram,每个集群有64Vcore。我们正在尝试使用spark通过properitery连接器转储数据,并且转储数据非常快。它基本上以CSV格式分多个数据块转储到S3中的临时位置。数据以64 mb csv文件的100万个数据块转储。

不进行分区,转换成镶木地板的数据将在3个小时内完成,包括数据的卸载。

问题陈述:

根据分区的要求,我的数据高度不对称,因为近年来有70%的数据,并且在此范围内,col1和col2均也极大地偏斜。

当我将文件转换为无分区的拼花地板时,我得到了成千上万个小文件,并且多个任务失败,并出现s3-slowdown请求率错误。如果我尝试合并或重新分区数据,则会遇到重新排列/内存中断的问题。我试图避免多次读取数据,因为转储的数据是未分区的,我可能最终每次都要读取整个1M文件进行过滤。

有没有一种方法可以在分区后重新分区(合并)文件?

1 个答案:

答案 0 :(得分:0)

感谢您的所有评论。我能够解决问题并能够达到要求。

  1. 我已将Redshift的摘录分离为单独的过程。由于Redshift的JDBC驱动程序存在多个问题。我在redshift上使用了本机卸载命令,该命令当前支持Parquet格式。因此,以镶木地板格式提取数据并写入s3。它使我的数据大小从60TB减少到9TB。
  2. 编写了一个自定义分区器(盐分)方法,并提出了一个算法,该算法将平均分配数据(至少相等,并将巨大的分区分成相等的块)。
  3. 在写入之前,我将使用自定义分区程序对数据进行重新分区并写入数据。

整个过程现在将在4-5小时内完成。