Почему Spark долгое время не использует все преимущества параллельных ресурсов? - PullRequest
1 голос
/ 13 июля 2020

Я запускал приложение Spark sql в Spark-Shell. На экране отображается индикатор выполнения, как показано ниже:

[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]

На этом этапе Spark sql считывал данные из таблицы куста.

Хотя параллельных ресурсов было достаточно (10 исполнителей, каждый имеет 10 ядер), искра не давала выполнить достаточно задач. Только 10 или менее задач выполнялись одновременно в течение нескольких минут. Пока не завершится последняя «ОДНА» задача (1801 + 1), Spark затем начнет помещать больше задач в очередь выполнения (НА ОДНОМ ЭТАПЕ).

Почему это происходило постоянно и как заставить Spark в полной мере использовать преимущества параллельные ресурсы?

Моя среда:

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