Apache spark 如何对DSX定时笔记本进行故障排除?

Apache spark 如何对DSX定时笔记本进行故障排除?,apache-spark,ibm-cloud,data-science-experience,dsx,Apache Spark,Ibm Cloud,Data Science Experience,Dsx,我有一个DSX笔记本,我可以使用DSX用户界面手动运行,它可以在Cloudant数据库中填充一些数据 我已经安排了笔记本每小时运行一次。一夜之间,我本以为该作业已经运行了很多次,但Cloudant数据库尚未更新 如何调试计划的作业?是否有任何日志可供我检查,以验证笔记本是否已实际执行?笔记本的输出是否保存到日志文件中?在哪里可以找到这些文件?一种可能是查看笔记本内核的内核日志。为此,您需要使用Python笔记本 在Python笔记本的gpfs上检查以下位置: !ls /gpfs/fs01/use

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

我已经安排了笔记本每小时运行一次。一夜之间,我本以为该作业已经运行了很多次,但Cloudant数据库尚未更新


如何调试计划的作业?是否有任何日志可供我检查,以验证笔记本是否已实际执行?笔记本的输出是否保存到日志文件中?在哪里可以找到这些文件?

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

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

!ls /gpfs/fs01/user/USERID/logs/notebook/
要获取用户ID,请执行以下代码:

!whoami

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

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

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

!ls /gpfs/fs01/user/USERID/logs/notebook/
要获取用户ID,请执行以下代码:

!whoami

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

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

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

One gotcha is
print()
语句不会写入日志文件,因此需要使用spark日志功能。在pyspark中,我创建了一个实用函数,该函数将输出发送到日志文件,但在手动运行笔记本时也会将输出打印到笔记本:

#日志记录的实用方法
log4jLogger=sc.\u jvm.org.apache.log4j
#给你的记录器起一个有意义的名字(我的名字是CloudantRecommender)
LOGGER=log4jLogger.LogManager.getLogger(“CloudantRecommender”)
def信息(*args):
打印(args)#将输出发送到笔记本
info(args)#将输出发送到内核日志文件
def错误(*args):
打印(args)#将输出发送到笔记本
LOGGER.error(args)#将输出发送到内核日志文件
在我的笔记本中使用类似的功能:

info(“一些日志输出”)
如果我检查日志文件,我可以看到我的注销正在写入:

!grep'CloudantRecommender'$HOME/logs/notebook/*pyspark*
kernel-pyspark-20170105_164844.日志:17/01/05 10:49:08信息CloudantRecommender:[从Cloudant开始加载:,2017-01-05 10:49:08]
kernel-pyspark-20170105_164844.日志:17/01/05 10:53:21信息CloudantRecommender:[来自Cloudant的已完成加载:,2017-01-05 10:53:21]
异常似乎也不会发送到日志文件,因此您需要将代码包装在一个try块中并记录错误,例如

导入回溯
尝试:
#可能引发异常的spark代码
例外情况除外,如e:
#将异常发送到火花记录器
错误(str(e),traceback.format_exc(),ts())
提高e
注意:调试期间我遇到的另一个问题是,计划作业运行特定版本的笔记本电脑。保存新版本的笔记本时,请检查是否更新了计划作业。

一个问题是
print()
语句将不会写入日志文件,因此需要使用spark日志记录功能。在pyspark中,我创建了一个实用函数,该函数将输出发送到日志文件,但在手动运行笔记本时也会将输出打印到笔记本:

#日志记录的实用方法
log4jLogger=sc.\u jvm.org.apache.log4j
#给你的记录器起一个有意义的名字(我的名字是CloudantRecommender)
LOGGER=log4jLogger.LogManager.getLogger(“CloudantRecommender”)
def信息(*args):
打印(args)#将输出发送到笔记本
info(args)#将输出发送到内核日志文件
def错误(*args):
打印(args)#将输出发送到笔记本
LOGGER.error(args)#将输出发送到内核日志文件
在我的笔记本中使用类似的功能:

info(“一些日志输出”)
如果我检查日志文件,我可以看到我的注销正在写入:

!grep'CloudantRecommender'$HOME/logs/notebook/*pyspark*
kernel-pyspark-20170105_164844.日志:17/01/05 10:49:08信息CloudantRecommender:[从Cloudant开始加载:,2017-01-05 10:49:08]
kernel-pyspark-20170105_164844.日志:17/01/05 10:53:21信息CloudantRecommender:[来自Cloudant的已完成加载:,2017-01-05 10:53:21]
异常似乎也不会发送到日志文件,因此您需要将代码包装在一个try块中并记录错误,例如

导入回溯
尝试:
#可能引发异常的spark代码
例外情况除外,如e:
#将异常发送到火花记录器
错误(str(e),traceback.format_exc(),ts())
提高e

注意:调试期间我遇到的另一个问题是,计划作业运行特定版本的笔记本电脑。保存新版本的笔记本时,请检查是否更新了计划作业。

是的,也可以。是的,也可以。