pyspark 提高Spark处理大量小文件的性能?

c8ib6hqw  于 2023-02-07  发布在  Spark
关注(0)|答案(2)|浏览(230)

我有数以百万计的Gzip文件要处理并转换成Parquet格式,我正在EMR上运行一个简单的Spark批处理作业来完成转换,一次给它几百万个文件来转换。
然而,我注意到从作业开始到文件被列出并被拆分成一个批处理以供执行器执行转换有一个很大的延迟。根据我所阅读和理解的,调度程序必须获取这些文件的元数据,并调度这些任务。然而,我注意到这一步要花15 - 20分钟才能将一百万个文件拆分成一批任务,尽管列出文件并进行转换的实际任务在我的示例集群中只需要15分钟,整个工作需要超过30分钟。2看起来驱动程序需要花费大量时间来索引所有的文件,然后将其分解为任务。3有什么方法可以在索引文件和分解批处理任务的初始阶段提高并行度吗?
我尝试过修改和增加spark.driver.cores,以为它会增加并行性,但似乎没有效果。

ogq8wdun

ogq8wdun1#

你可以通过设置下面的配置来尝试

spark.conf.set("spark.default.parallelism",x)

其中x =群集中的节点总数 (节点中的核心总数-1) 5

0sgqnhkj

0sgqnhkj2#

这是spark(和其他大数据工具)的常见问题,因为它只使用驱动程序来列出源(S3)中的所有文件及其路径。
我发现这个X11E11F1X对解决这个问题非常有帮助,我们可以使用PureTools创建文件的并行RDD,并将其传递给Spark进行处理,而不是使用Spark列出和获取文件的元数据。

S3特定溶液

如果您不想像上面的指南那样安装和设置工具,您也可以使用S3清单文件列出一个桶中存在的所有文件,并使用rdds并行迭代这些文件。

相关问题