Как автоматически копировать нить-логи с помощью scala в блоб-хранилище - PullRequest
1 голос
/ 21 июня 2019

У нас есть требование для автоматической загрузки журналов 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")

1 Ответ

0 голосов
/ 24 июня 2019

Примечание: Вы можете получить прямой доступ к файлам журналов, используя Хранилище Azure => BLOB-объекты => Выбрать Контейнер => журналы приложений

enter image description here

Azure HDInsight сохраняет свои файлы журналов как в кластерной файловой системе , так и в Лазурное хранилище .Вы можете проверить файлы журнала в кластере, открыв SSH-соединение с кластером и просмотрев файловую систему, или используя портал состояния Hadoop YARN на сервере удаленного головного узла.Вы можете просмотреть файлы журналов в хранилище Azure с помощью любого из инструментов, которые могут обращаться к данным и загружать их из хранилища Azure.

Примерами являются AzCopy, CloudXplorer и Visual Studio Server Explorer.Вы также можете использовать библиотеки PowerShell и клиента хранилища Azure или Azure .NET SDK для доступа к данным в хранилище больших двоичных объектов Azure.

Для получения дополнительной информации см. " Управление журналами для кластера Azure HDInsight".

Надеюсь, это поможет.

...