#pandas #apache-spark #pyspark #apache-spark-mllib #metrics
#pandas #apache-spark #pyspark #apache-spark-mllib #показатели
Вопрос:
В настоящее время, работая над Spark, я собрал некоторые показатели производительности с помощью пользовательского API Spark listener для целей анализа. Я попытался создать график с накоплением столбцов, который показывает процент времени, затрачиваемого исполнителем на выполнение задачи, перетасовку или паузы при сборке мусора для трех разных алгоритмов машинного обучения. Вот скриншот того, что я нашел:
Что привлекло мое внимание сразу после появления графика, так это то, что скорости являются ложными. Вы можете видеть, что оно превышает значение 1 для алгоритма kmeans и меньше 0,8 для персептрона.
Вот как я вычислил скорости:
execution['cpuRate'] = execution['executorCpuTime'] / execution['executorRunTime']
execution['serRate'] = execution['resultSerializationTime'] / execution['executorRunTime']
execution['gcRate'] = execution['jvmGCTime'] / execution['executorRunTime']
execution['shuffleFetchRate'] = execution['shuffleFetchWaitTime'] / execution['executorRunTime']
execution['shuffleWriteRate'] = execution['shuffleWriteTime'] / execution['executorRunTime']
execution = execution[['cpuRate', 'serRate', 'gcRate', 'shuffleFetchRate', 'shuffleWriteRate']]
execution.plot.bar(stacked=True)
Я использую библиотеку Pandas, а выполнение — это фрейм данных, содержащий усредненные показатели.
Конечно, я предполагаю, что executorRunTime является суммированием других базовых показателей, но это оказывается ложным.
Что означают эти периоды времени и как они соотносятся? Я имею в виду: из чего состоит время выполнения, если не из всех других показателей, указанных выше?
Спасибо
Ответ №1:
Согласно TaskMetrics.scala:
* Time the executor spends actually running the task (including fetching shuffle data).
*/
def executorRunTime: Long = _executorRunTime.sum
Измеряется в миллисекундах.