为啥在 S3 存储桶中加载 CSV 文件的任务很多?

Posted

技术标签:

【中文标题】为啥在 S3 存储桶中加载 CSV 文件的任务很多?【英文标题】:Why are there a mass of tasks for loading a CSV file in S3 bucket?为什么在 S3 存储桶中加载 CSV 文件的任务很多? 【发布时间】:2019-01-21 13:30:57 【问题描述】:

我有一个具有动态资源分配的小型 spark 独立集群,它使用 aws s3 作为存储,然后我启动一个 spark sql,创建一个配置单元外部表,从 s3 存储桶中的 779.3KB csv 文件加载数据,当我执行 sql “select count(1) from sales;”,spark sql作业中正好有798009个任务,就像一个字节一个任务。并且“spark.default.parallelism”不起作用。有什么建议吗?

【问题讨论】:

【参考方案1】:

如果您使用的是 Hadoop 2.6 JAR,那么这是该 s3a 版本中的错误;如果您在其他地方看到它,则可能是配置问题。

您的文件被分成每个字节一个分区,因为文件系统说“每个分区都是一个字节长”。这意味着FileSystem.getBlockSize() 正在返回值“0”(参见HADOOP-11584:s3a 文件块大小在 getFileStatus 中设置为 0)。

对于 s3a 连接器,请确保您使用的是 2.7+,然后将 fs.s3a.block.size 设置为 33554432(即 32MB),此时您的源文件将不会被拆分。

如果你能上到 2.8;我们已经做了大量工作来加快输入和输出速度,尤其是在列格式 IO 及其搜索模式方面。

【讨论】:

【参考方案2】:

在运行查询之前尝试 DF.repartition(1)。运行此命令时,分区数一定是太多了。

【讨论】:

【参考方案3】:

使用 spark.sql.shuffle.partitions=2

【讨论】:

以上是关于为啥在 S3 存储桶中加载 CSV 文件的任务很多?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PySpark 从日常文件中加载滚动窗口?

存储桶策略后 PDF 文件不会在 Chrome 中加载(在其他浏览器中加载)

从 S3 存储桶中读取大量 CSV 文件

在 Heroku 和 Amazon S3 上的生产 Rails/Vue 应用程序中加载字体时出现 CORS 错误

如何从 S3 存储桶中读取最后修改的 csv 文件?

Pyspark 从 S3 存储桶读取 csv 文件:AnalysisException:路径不存在