首页 > 解决方案 > 为什么 Spark 长期没有充分利用并行资源?

问题描述

我在 spark-shell 中运行 sparksql 应用程序。屏幕进度条记录如下:

[Stage 3:===========>                                        (1722 + 20) / 8040]
[Stage 3:===========>                                        (1725 + 20) / 8040]
[Stage 3:===========>                                        (1726 + 20) / 8040]
[Stage 3:===========>                                        (1728 + 19) / 8040]
[Stage 3:===========>                                        (1730 + 17) / 8040]
[Stage 3:===========>                                        (1737 + 15) / 8040]
[Stage 3:===========>                                        (1738 + 14) / 8040]
[Stage 3:===========>                                        (1742 + 12) / 8040]
[Stage 3:===========>                                        (1746 + 10) / 8040]
[Stage 3:===========>                                        (1749 + 10) / 8040]
[Stage 3:===========>                                        (1750 + 10) / 8040]
[Stage 3:===========>                                        (1752 + 10) / 8040]
[Stage 3:===========>                                        (1755 + 10) / 8040]
[Stage 3:===========>                                        (1759 + 10) / 8040]
[Stage 3:===========>                                        (1763 + 10) / 8040]
[Stage 3:===========>                                        (1766 + 10) / 8040]
[Stage 3:===========>                                        (1770 + 10) / 8040]
[Stage 3:===========>                                        (1774 + 10) / 8040]
[Stage 3:===========>                                        (1775 + 10) / 8040]
[Stage 3:===========>                                        (1776 + 10) / 8040]
[Stage 3:===========>                                        (1781 + 10) / 8040]
[Stage 3:===========>                                        (1785 + 10) / 8040]
[Stage 3:===========>                                        (1787 + 10) / 8040]
[Stage 3:===========>                                        (1790 + 10) / 8040]
[Stage 3:===========>                                        (1792 + 10) / 8040]
[Stage 3:===========>                                         (1793 + 9) / 8040]
[Stage 3:===========>                                         (1794 + 8) / 8040]
[Stage 3:===========>                                         (1795 + 7) / 8040]
[Stage 3:===========>                                         (1797 + 5) / 8040]
[Stage 3:===========>                                         (1798 + 4) / 8040]
[Stage 3:===========>                                         (1800 + 2) / 8040]
[Stage 3:===========>                                         (1801 + 1) / 8040]
[Stage 3:===========>                                       (1801 + 100) / 8040]
[Stage 3:===========>                                       (1802 + 100) / 8040]
[Stage 3:===========>                                       (1805 + 100) / 8040]
[Stage 3:===========>                                       (1810 + 100) / 8040]

在这个阶段,sparksql 正在从 hive 表中读取数据。

虽然并行资源足够(10 个执行器,每个执行器有 10 个核心),但 spark 并没有让足够的任务执行。只有 10 个或更少的任务在数分钟内同时执行。直到最后一个“ONE”任务(1801 + 1)完成,火花然后开始将更多任务放入执行队列(在同一阶段)。

为什么会重复出现这种情况,如何让 Spark 充分利用并行资源?

我的环境是:

Hadoop-2.7.7
Hive-2.3.6
Spark-2.4.4 ~ Spark-3.0.0

标签: apache-sparkapache-spark-sql

解决方案


推荐阅读