Код Pyspark работает медленнее, если импортируется из пакета по сравнению с простым кодом без импорта - PullRequest
0 голосов
/ 01 ноября 2018

Я сталкиваюсь со специфической проблемой при тестировании производительности моего кода pyspark.

Я получаю данные из kafkadstream, затем конвертирую rdd в dataframe, а затем после некоторых преобразований сохраняю искровой dataframe в HBase через pheonix.
Ниже приведены статистические данные.

Для кластера разработки
[кластер разработки] [простой код без импорта пакетов] :
Количество записей: 10
Время создания DF: 0,185553 секунды
DF Время вставки: 0,511172 секунды

[кластер разработки] [с использованием общего кода из пакета импорта] :
Примечание: пакет отправляется "--py-files package.zip"
Количество записей: 10
Время создания DF: 2,896647 секунд
DF Время вставки: 3.456992 секунды

[кластер разработки] [с использованием общего кода из пакета импорта] :
Примечание: пакет установлен на каждом узле
Количество записей: 10
Время создания DF: 0,680334 секунды
DF Время вставки: 0,831929 секунд


Теперь для производственного кластера:
[рабочий кластер] [простой код без импорта пакетов] :
Количество записей: 10
Время создания DF: 0,184458 секунд
DF Время вставки: 0,736582 секунды

[рабочий кластер] [с использованием общего кода из пакета импорта] :
Примечание: пакет отправляется "--py-files package.zip"
Количество записей: 10
Время создания DF: 1,925941 секунда
DF Время вставки: 2.203001 секунды

[рабочий кластер] [с использованием общего кода из пакета импорта] :
Примечание: пакет установлен на каждом узле
Количество записей: 10
Время создания DF: 1.966830 секунд
Время вставки DF: 2,408202 секунды

Таким образом, в кластере разработки, когда я установил свой код на каждом узле и установил PYTHONPATH, он улучшил производительность, и производительность кода, импортированного из пакета, почти равна простому коду Python без импорта. Но в производстве это совсем не помогло.

для всех вышеописанных сценариев, которые я использовал - executor-memory 1g --num-executors 1 --executor-cores = 1

Я буду очень признателен, если кто-нибудь укажет мне правильное направление.

1 Ответ

0 голосов
/ 01 ноября 2018

В случае, если вы отправляете свой код с --py-files, вы должны добавить время к:

  • Распределите почтовый индекс.
  • Распакуйте zip в рабочие каталоги.

Кроме того, если пакеты импортированы, добавьте время для анализа и оценки. Небольшие различия во времени, как это, не особенно удивляют, и их даже можно избежать в этой конструкции.

Если вы хотите избежать этой проблемы, разверните пакеты один раз на каждом узле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...