如何排除DSX预定笔记本的故障?

时间:2017-01-05 07:32:07

标签: apache-spark ibm-cloud data-science-experience dsx

我有一个DSX笔记本,我可以使用DSX用户界面手动运行它,它会在Cloudant数据库中填充一些数据。

我已安排笔记本每小时运行一次。一夜之间,我原本预计这项工作会多次运行,但Cloudant数据库尚未更新。

如何调试预定作业?是否有任何日志可以检查以确认笔记本电脑是否已被执行?我的笔记本的输出是保存到日志文件吗?我在哪里可以找到这些文件?

3 个答案:

答案 0 :(得分:2)

一种可能性是查看笔记本内核的内核日志。为此,您需要使用Python笔记本。

检查Python笔记本中gpfs的以下位置:

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

要获取USERID,请执行以下代码:

!whoami

您应该为每个内核找到一个日志文件,例如内核python3-20170105_102510。

答案 1 :(得分:2)

一个问题是print()语句不会进入日志文件,因此您需要使用spark logging功能。在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

注意:在调试过程中遇到的另一个问题是,预定作业会运行特定版本的笔记本。保存笔记本的新版本时,请检查是否更新了计划作业。

答案 2 :(得分:1)

您可以在~/notebook/logs/位置找到笔记本执行日志。如果您的笔记本在一夜之间多次执行,您会发现几个日志条目(ls -la ~/notebook/logs/)。打开其中一个相关日志文件(根据时间戳),查看笔记本是否与Cloudant或其他内容(cat ~/notebook/logs/kernel-pyspark-20170105_095103.log)存在连接问题。