Долгое время ожидания между INFO CoarseGrainedExecutorBackend и INFO Executor для блоков данных Azure [Spark-Scala] - PullRequest
0 голосов
/ 03 мая 2019

Я создаю блокнот Databricks для циклического прохождения всех файлов в моем озере данных и создания одного измерения продукта.

Все ли хорошо работает для небольшого диапазона дат (менее 15), но после достижения более 20 дней задания начинают выполняться дольше, а работа ноутбука занимает много времени (я перестал поливать после 3часов).

Я проверил наше отставание по stderr и нашел что-то странное.Все задания выполняются менее чем за одну секунду, но между завершением задания и CoarseGrainedExecutorBackend существует длительное время ожидания.

Я не знаю, что делает CoarseGrainedExecutorBackend, но время ожидания составляет до 3 минут.

Вот скриншот аномалии:

stderr

Вот код, используемый для создания измерения:

//Create variables to be used in loop
val firstHistDate = "20190410"
var loopCal = Calendar.getInstance
loopCal.add(Calendar.DATE, -1)

var loopDate = loopCal.getTime
var loopDay = new SimpleDateFormat("dd").format(loopDate)
var loopMonth = new SimpleDateFormat("MM").format(loopDate)
var loopYear = new SimpleDateFormat("YYYY").format(loopDate)

var pathLoop = ""
var counter = 0
var loopDateFormatted = ""

// Create Dataframe for the first date

var df1 = sqlContext.read.format("csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load(pathRaw)
  .selectExpr("PROD_ID","PROD_NOME","PROD_EAN","PROD_DEPARTAMENTO_ID","PROD_DEPARTAMENTO_NOME","PROD_CATEGORIA_ID","PROD_CATEGORIA_NOME", "PROD_SUBCATEGORIA_ID", "PROD_SUBCATEGORIA_NOME","PROD_MARCA_ID","PROD_MARCA_NOME","PROD_VOLUME_ID","PROD_VOLUME_NOME","PROD_UNIDADE_ID","PROD_UNIDADE_NOME","CATEGORIA")
 .dropDuplicates("PROD_ID")

//Initiate loop over the files for the previous 14 days
while (loopDateFormatted != firstHistDate) 
  {
  //Creates path for next file
  loopCal.add(Calendar.DATE, -1)
  loopDate = loopCal.getTime
  loopDay = new SimpleDateFormat("dd").format(loopDate)
  loopMonth = new SimpleDateFormat("MM").format(loopDate)
  loopYear = new SimpleDateFormat("YYYY").format(loopDate)

  pathLoop = s"$pathADLS/$dbName/$tableName/Brazil/LandedFiles/$loopYear/$loopMonth/$loopDay/${tableName}_$loopYear$loopMonth$loopDay.csv" 

  //Appends new data set to DF
  var df2 = sqlContext.read.format("csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load(pathLoop)
  .selectExpr("PROD_ID","PROD_NOME","PROD_EAN","PROD_DEPARTAMENTO_ID","PROD_DEPARTAMENTO_NOME","PROD_CATEGORIA_ID","PROD_CATEGORIA_NOME", "PROD_SUBCATEGORIA_ID", "PROD_SUBCATEGORIA_NOME","PROD_MARCA_ID","PROD_MARCA_NOME","PROD_VOLUME_ID","PROD_VOLUME_NOME","PROD_UNIDADE_ID","PROD_UNIDADE_NOME","CATEGORIA")
  .dropDuplicates("PROD_ID")

  var df3 = df2.select("PROD_ID").except(df1.select("PROD_ID"))

  var df31 = df3.withColumnRenamed("PROD_ID","ID")

  var df4 = df31.join(df2, df31("ID")===df2("PROD_ID"), "left")

  df1 = df1.union(df4.drop("ID"))

  loopDateFormatted = loopYear+loopMonth+loopDay
  }

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

...