为啥在 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 文件的任务很多?的主要内容,如果未能解决你的问题,请参考以下文章
存储桶策略后 PDF 文件不会在 Chrome 中加载(在其他浏览器中加载)