纱线上的火花任务太多[重复]

Posted

技术标签:

【中文标题】纱线上的火花任务太多[重复]【英文标题】:Too many tasks in spark on Yarn [duplicate] 【发布时间】:2017-12-26 09:15:31 【问题描述】:

我使用 spark-sql 读取一个大表并生成 100,000 个任务。

我知道我可以设置 num_of_partitions 但它对小表也是如此。

Is there any way to limit the size of each partition ?

【问题讨论】:

【参考方案1】:

目前 Spark 不支持分区大小限制。如果要减少任务数量,则需要将分区号设置为较小的数字。

现在通常使用的技巧是根据数据大小动态设置分区数。通常,您希望您的分区等于 HDFS 块大小 (128MB)。如果您知道数据每行的大小,则可以估计每个分区要保留多少行。假设它的值为 X。

然后你可以设置 num_of_partitions 为

dataframe.count / x 

【讨论】:

但是我想在不同的表上使用相同的代码,大表比小表需要更多的分区。 dataframe.count / x 会设置不同的分区号。现在唯一的事情是你需要想出每个表的行大小(x)。这个数字可以参数化。在这种情况下,相同的代码将适用于大小表 哦,我知道你的意思...但是如果数字太大,count 会太贵,对吧? 计数通常不是一项昂贵的操作,因为它不需要加载所有数据。因此,在读取数据后,如果您计算元素的数量,与工作时间相比,它根本不会昂贵。

以上是关于纱线上的火花任务太多[重复]的主要内容,如果未能解决你的问题,请参考以下文章

纱线上的哪个目录触发应用程序将其日志输出到?每个节点中的 spark.eventLog.dir 或 var/log/?

当资源不足时,火花作业将等待来自纱线的资源多长时间?

使用远程 jvm 在纱线集群上提交火花作业时出现异常

在火花代码管理 conf.setMaster() 使用配置文件自动设置本地或纱线集群

无法在纱线簇模式下读取带有火花的Hbase数据

我编写了一个火花作业以在本地模式下运行,但是当我提交该作业时,我在纱线集群模式下运行它。在这种情况下究竟会发生啥?