Em meu shell de faísca, o que entradas como as abaixo significam quando eu executo uma função?
[Stage7:===========> (14174 + 5) / 62500]
Em meu shell de faísca, o que entradas como as abaixo significam quando eu executo uma função?
[Stage7:===========> (14174 + 5) / 62500]
Respostas:
O que você obtém é um Console Progress Bar
,
[Stage 7:
mostra o estágio em que você está agora, e
(14174 + 5) / 62500]
é (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
. A barra de progresso mostra numCompletedTasks
/ totalNumOfTasksInThisStage
.
Será mostrado quando ambos spark.ui.showConsoleProgress
forem verdadeiros (por padrão) e o nível de registro conf/log4j.properties
for ERROR
ou WARN
( !log.isInfoEnabled
verdadeiros).
Vamos ver o código em ConsoleProgressBar.scala que o mostra:
private def show(now: Long, stages: Seq[SparkStageInfo]) {
val width = TerminalWidth / stages.size
val bar = stages.map { s =>
val total = s.numTasks()
val header = s"[Stage ${s.stageId()}:"
val tailer = s"(${s.numCompletedTasks()} + ${s.numActiveTasks()}) / $total]"
val w = width - header.length - tailer.length
val bar = if (w > 0) {
val percent = w * s.numCompletedTasks() / total
(0 until w).map { i =>
if (i < percent) "=" else if (i == percent) ">" else " "
}.mkString("")
} else {
""
}
header + bar + tailer
}.mkString("")
// only refresh if it's changed of after 1 minute (or the ssh connection will be closed
// after idle some time)
if (bar != lastProgressBar || now - lastUpdateTime > 60 * 1000L) {
System.err.print(CR + bar)
lastUpdateTime = now
}
lastProgressBar = bar
}
Vamos supor que você veja o seguinte (X, A, B, C são sempre inteiros não negativos):
[Stage X:==========> (A + B) / C]
(por exemplo, na pergunta X = 7, A = 14174, B = 5 e C = 62500)
Aqui está o que está acontecendo em alto nível: o Spark divide o trabalho em estágios e tarefas em cada estágio. Este indicador de progresso significa que o Estágio X é composto de tarefas C. Durante a execução, A e B começam em zero e continuam mudando. A é sempre o número de tarefas já concluídas e B é o número de tarefas em execução no momento. Para um estágio com muitas tarefas (muito mais do que os trabalhadores que você tem), você deve esperar ver B crescer a um número que corresponde a quantos trabalhadores você tem no cluster, então você deve começar a ver A aumentar conforme as tarefas são concluídas. No final, conforme as últimas tarefas são executadas, B começará a diminuir até atingir 0, quando o ponto A deve ser igual a C, o estágio está concluído e a centelha passa para o próximo estágio. C permanecerá constante durante todo o tempo, lembre-se que é o número total de tarefas no estágio e nunca muda.
O ====> mostra a porcentagem de trabalho realizado com base no que descrevi acima. No início, o> estará para a esquerda e se moverá para a direita conforme as tarefas são concluídas.