У нас есть требование для автоматической загрузки журналов SSN в хранилище BLOB-объектов.Я обнаружил, что журналы пряжи добавляются в учетную запись хранения по пути /app-logs/user/logs/
и т. Д., Но они находятся в двоичном формате, и нет документированного способа преобразовать их в текстовый формат.Поэтому мы пытаемся запустить внешнюю команду yarn logs -application <application_id>
с использованием scala в конце запуска приложения, чтобы захватить журналы и сохранить их в хранилище больших двоичных объектов, но столкнулись с проблемами.В поисках решения для автоматической загрузки этих журналов в учетную запись хранилища как часть самого конвейера зажигания.
Я попытался перенаправить вывод команды yarn logs во временный файл, а затем скопировать файл из локального хранилища в BLOB-объект.место хранения.Эти команды работают нормально, когда я запускаю ssh в головной узел искрового кластера.Но они не работают, когда выполняются из ноутбука jupyter или приложения scala.
("yarn logs -applicationId application_1561088998595_xxx > /tmp/yarnlog_2.txt") !!
("hadoop dfs -fs wasbs://dev52mss@sahdimssperfdev.blob.core.windows.net -copyFromLocal /tmp/yarnlog_2.txt /tmp/") !!
Когда я запускаю эти команды с помощью ноутбука jupyter, первая команда отлично работает для перенаправления в локальный файл, а вторая - для перемещениясбой файла для блоба со следующей ошибкой:
предупреждение: было одно предупреждение функции;перезапустите с параметром -feature для java.lang.RuntimeException: Ненулевое значение выхода: 1 в scala.sys.package $ .error (package.scala: 27) в scala.sys.process.ProcessBuilderImpl $ AbstractBuilder.slurp (ProcessBuilderImpl.scala: 132) at scala.sys.process.ProcessBuilderImpl $ AbstractBuilder. $ bang $ bang (ProcessBuilderImpl.scala: 102) ... 56 elided
Изначально я пытался захватить выходные данные команды какDataframe и запись dataframe в blob.Это удалось для небольших журналов, но для больших журналов это не удалось с ошибкой:
Сериализированная задача 15: 0 была 137500581 байт, что превышает максимально допустимое значение: spark.rpc.message.maxSize (134217728 байт).Попробуйте увеличить spark.rpc.message.maxSize или использовать широковещательные переменные для больших значений
val yarnLog = Seq(Process("yarn logs -applicationId " + "application_1560960859861_0003").!!).toDF()
yarnLog.write.mode("overwrite").text("wasbs://container@storageAccount.blob.core.windows.net/Dev/Logs/application_1560960859861_0003.txt")