Apache spark 如何对DSX定时笔记本进行故障排除?
我有一个DSX笔记本,我可以使用DSX用户界面手动运行,它可以在Cloudant数据库中填充一些数据 我已经安排了笔记本每小时运行一次。一夜之间,我本以为该作业已经运行了很多次,但Cloudant数据库尚未更新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
如何调试计划的作业?是否有任何日志可供我检查,以验证笔记本是否已实际执行?笔记本的输出是否保存到日志文件中?在哪里可以找到这些文件?一种可能是查看笔记本内核的内核日志。为此,您需要使用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 isprint()
语句不会写入日志文件,因此需要使用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
注意:调试期间我遇到的另一个问题是,计划作业运行特定版本的笔记本电脑。保存新版本的笔记本时,请检查是否更新了计划作业。是的,也可以。是的,也可以。