编辑:对Databricks使用Spark
据我所知,有效的分区应该基于可用的执行器的数量,理想情况下分区% executors =0
但是如果你在一个共享的Spark集群上工作,这个集群可以根据活动自动伸缩,在这个集群中,人们可能会让一些执行者忙于自己的工作,那么以这种方式有效地分区和存储桶是可能的吗?
假设我注意到集群上有8个exectutor处于活动状态,因此我创建了8个分区或存储桶,以便更轻松地分配工作负载。在这种情况下,Alice和Jane登录并开始运行大型查询,因此集群扩展到12个执行器。
现在我不再被有效地分割了。或者,如果集群没有升级,但Alice和Jane占用了一些执行器,现在我的分区将会倾斜,对吧?
或者..。Spark会意识到我有8个分区吗?如果没有足够的分区,Spark会根据需要进行升级吗?
发布于 2021-11-26 18:56:22
规则partitions % executors = 0应用于高效处理,因此在某个时间点上,您拥有的分区不会少于executors。实际上,事情要复杂得多-分区可以很小,然后在自适应查询执行( AQE )开始时自动合并,将多个小分区组合成更大的逻辑分区,等等。这是Spark 3.x上的“优化”之一-将分区设置为较大的数字,并允许AQE对其进行优化,而不是以太大的分区结束。
是的,在共享集群上,一些资源可能会被其他用户占用,但这只会为你的处理分配更少的内核,而不会扭曲你的分区。不对称分区主要与不同大小的分区相关,但这也应该由DBR 7.3+上启用的AQE来处理。
总而言之:是的,在共享集群上,一些资源会被其他用户占用,但除此之外,最好是依靠Spark 3.x在自动优化方面的改进。在以前的版本中,有许多在新版本中不需要的手动调优。
https://stackoverflow.com/questions/70124322
复制相似问题