Как устранить неполадки запланированного ноутбука DSX?

У меня есть ноутбук DSX, который я могу запустить вручную, используя пользовательский интерфейс DSX, и он заполняет некоторые данные в базе данных Cloudant.

Я запланировал, что ноутбук будет работать каждый час. В одночасье я ожидал, что задание будет выполнено много раз, но база данных Cloudant не была обновлена.

Как я могу отладить запланированную работу? Есть ли какие-либо журналы, которые я могу проверить, чтобы убедиться, что записная книжка действительно была выполнена? Сохраняется ли вывод из моей записной книжки в файлы журнала? Где я могу найти эти файлы?

3 ответа

Решение

Одна из возможностей - заглянуть в журналы ядра вашего ноутбука. Для этого вам нужно использовать ноутбук Python.

Проверьте следующее местоположение на gpfs в вашей записной книжке Python:

!ls /gpfs/fs01/user/USERID/logs/notebook/

Чтобы получить USERID, выполните следующий код:

!whoami

Для каждого ядра вы должны найти файл журнала, например, kernel-python3-20170105_102510.

Одна ошибка есть print() операторы не попадут в файл журнала, поэтому вам нужно использовать функцию регистрации искры. В pyspark я создал служебную функцию, которая отправляет вывод в файл журнала, а также печатает его в записную книжку, когда записная книжка запускается вручную:

# utility method for logging
log4jLogger = sc._jvm.org.apache.log4j

# give a meaningful name to your logger (mine is CloudantRecommender)
LOGGER = log4jLogger.LogManager.getLogger("CloudantRecommender")

def info(*args):
    print(args) # sends output to notebook
    LOGGER.info(args) # sends output to kernel log file

def error(*args): 
    print(args) # sends output to notebook
    LOGGER.error(args) # sends output to kernel log file

Используя эту функцию, как в моем блокноте:

info("some log output")

Если я проверю файлы журнала, я вижу, что мой выход из системы записывается:

! grep 'CloudantRecommender' $HOME/logs/notebook/*pyspark* 

kernel-pyspark-20170105_164844.log:17/01/05 10:49:08 INFO CloudantRecommender: [Starting load from Cloudant: , 2017-01-05 10:49:08]
kernel-pyspark-20170105_164844.log:17/01/05 10:53:21 INFO CloudantRecommender: [Finished load from Cloudant: , 2017-01-05 10:53:21]

Исключения также не отправляются в файл журнала, поэтому вам нужно будет обернуть код в блок try и зарегистрировать ошибку, например

import traceback
try:
    # your spark code that may throw an exception
except Exception as e:
    # send the exception to the spark logger
    error(str(e), traceback.format_exc(), ts())
    raise e

ВНИМАНИЕ: Еще один момент, который меня поразил во время отладки, это то, что запланированные задания запускают определенную версию ноутбука. Убедитесь, что вы обновляете задание по расписанию при сохранении новых версий записной книжки.

Вы можете найти журналы выполнения ноутбука в месте ~/notebook/logs/, Если ваш ноутбук был выполнен несколько раз за ночь, вы найдете несколько записей журнала (ls -la ~/notebook/logs/). Откройте один из соответствующих файлов журнала (в соответствии с меткой времени), чтобы узнать, не было ли у ноутбуков проблем с подключением к Cloudant или чем-то еще (cat ~/notebook/logs/kernel-pyspark-20170105_095103.log).

Другие вопросы по тегам