Я сталкиваюсь со специфической проблемой при тестировании производительности моего кода 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
Я буду очень признателен, если кто-нибудь укажет мне правильное направление.