Apache spark Spark 2.X:使用Spark SQL查询配置单元表时Spark作业设置的任务数
关于Spark任务的数量以及它与分区数量的关系,已经提出了很多问题。但不知何故,我无法理解以下情况 我有一个配置单元表(一个HDFS文件夹),其中包含160个拼花压缩文件。 这些文件大部分都很平衡:最小的是7.5MB,最大的是49.2MB。 在HDFS浏览器中,我看到每个文件都在1个(非完整)HDFS块(128MB)内 集群具有以下属性:10台机器、1台主服务器和9台辅助服务器。每台机器有6个核(12个虚拟核)。我用的是纱线。此外:Apache spark Spark 2.X:使用Spark SQL查询配置单元表时Spark作业设置的任务数,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,关于Spark任务的数量以及它与分区数量的关系,已经提出了很多问题。但不知何故,我无法理解以下情况 我有一个配置单元表(一个HDFS文件夹),其中包含160个拼花压缩文件。 这些文件大部分都很平衡:最小的是7.5MB,最大的是49.2MB。 在HDFS浏览器中,我看到每个文件都在1个(非完整)HDFS块(128MB)内 集群具有以下属性:10台机器、1台主服务器和9台辅助服务器。每台机器有6个核(12个虚拟核)。我用的是纱线。此外: spark.executor.cores = 6 现在,我创
spark.executor.cores = 6
现在,我创建以下数据帧:
val myDF = spark.sql("SELECT * FROM myHiveTable WHERE myCol='someValue')
即使在触发作业之前,也可以提前知道:
myDF.rdd.partitions.size
返回60
为了触发作业,需要一个操作,所以我将“myDF”写入HDFS。这项工作确实产生了42名执行者和60项任务
我的问题是:
谢谢大家! 我想这可能就是问题1和3的答案 显然,如果我将配置单元表(实际上是一个文件夹)作为rdd读取,我也会得到相同数量的分区(60)。rdd的分区数由特定的InputFormat确定。 资料来源: 因此,我搜索了由@Samson Scharfrichter的评论触发的拼花地板的行为,我发现:
因此,这个公式也许可以解释为什么是60,以及如何提前计算。根据记录,拼花地板文件的平行度是“行块”的数量,也就是说,可能超过文件的数量(或者更少,如果你有空文件)。@SamsonScharfrichter你能澄清你的评论吗?这里有进展吗?
Min(defaultMinSplitSize (128MB, `spark.sql.files.maxPartitionBytes`,
Max(openCostInByte(8MB, `spark.sql.files.openCostInBytes`,
totalSize/defaultParallelism)
)