Получение LeaseExpiredException в случайном потоке искры - PullRequest
0 голосов
/ 02 июля 2018

у меня струится искра (2.1.1 с cloudera 5.12). с входной кафкой и выходной HDFS (в формате паркета) проблема в том, что я получаю LeaseExpiredException случайно (не во всех мини-пакетах)

org.apache.hadoop.ipc.RemoteException (org.apache.hadoop.hdfs.server.namenode. год = 2018 / месяц = ​​6 / день = 29 / час = 11 / источник = LYO2 / part-00000-c6f21a40-4088-4d97-ae0c-24fa463550ab.snappy.parquet (индекс 135532024): файл не существует. Держатель DFSClient_attempt_20180629132202_0215_m_000000_0_-1048963677_900 не имеет открытых файлов.

Я использую API набора данных для записи в hdfs

      if (!InputWithDatePartition.rdd.isEmpty() ) InputWithDatePartition.repartition(1).write.partitionBy("year", "month", "day","hour","source").mode("append").parquet(cleanPath)

моя работа не работает через несколько часов из-за этой ошибки

1 Ответ

0 голосов
/ 22 января 2019

Два задания записывают в один и тот же каталог в одной папке _temporary.

Таким образом, когда первое задание завершается, этот код выполняется ( FileOutputCommitter class ):

  public void cleanupJob(JobContext context) throws IOException {
    if (hasOutputPath()) {
      Path pendingJobAttemptsPath = getPendingJobAttemptsPath();
      FileSystem fs = pendingJobAttemptsPath
          .getFileSystem(context.getConfiguration());
      // if job allow repeatable commit and pendingJobAttemptsPath could be
      // deleted by previous AM, we should tolerate FileNotFoundException in
      // this case.
      try {
        fs.delete(pendingJobAttemptsPath, true);
      } catch (FileNotFoundException e) {
        if (!isCommitJobRepeatable(context)) {
          throw e;
        }
      }
    } else {
      LOG.warn("Output Path is null in cleanupJob()");
    }
  }

удаляет pendingJobAttemptsPath (_ временный), пока второе задание еще выполняется Это может быть полезно:

Несколько заданий зажигания, добавляющие данные паркета к одному базовому пути с разбиением

...