You need to enable JavaScript to run this app.
导航
Notebook 任务 Kernel 启动异常自查指南
最近更新时间:2024.08.23 20:12:55首次发布时间:2024.08.23 20:12:55
  • 写在最前面:可以尝试去掉所有参数+镜像试试看!!!以便于先排除镜像或者参数问题

1 Spark-Kernel 类型启动失败可能的原因:

  1. 使用自定义镜像,镜像有 Spark/Notebook 相关 Python 包,可能会引起基础环境有问题,导致 Kernel 无法启动,您可尝试去除自定义镜像,使用默认镜像启动。
  2. 当前登陆用户缺少当前队列权限、队列资源紧张,可尝试更换队列启动。
  3. Spark 参数配置不正确,可尝试去除 Spark 参数启动。

    注意

    Value 值有空格或者分号(;)时,需要对整个参数加上"",如:

    • spark.executor.extraJavaOptions=-verbose:gc -XX:+UseG1GC -XX:-UseGCOverheadLimit -XX:+ExitOnOutOfMemoryError -XX:ParallelGCThreads=4 -XX:ConcGCThreads=4 -XX:+TraceClassLoading
      需要改成:
      spark.executor.extraJavaOptions="-verbose:gc -XX:+UseG1GC -XX:-UseGCOverheadLimit -XX:+ExitOnOutOfMemoryError -XX:ParallelGCThreads=4 -XX:ConcGCThreads=4 -XX:+TraceClassLoading"
    • spark.yarn.appMasterEnv.ENV_DOCKER_CONTAINER_CAP_ADD=SYS_ADMIN;NET_ADMIN;SYS_PTRACE
      需要改成:
      spark.yarn.appMasterEnv.ENV_DOCKER_CONTAINER_CAP_ADD= "SYS_ADMIN;NET_ADMIN;SYS_PTRACE"

2 k8s-Kernel 类型启动失败可能的原因:

  1. 使用自定义镜像,镜像有 Notebook 相关 Python 包,可能会引起基础环境有问题,导致 Kernel 无法启动,您可尝试去除自定义镜像,使用默认镜像启动。
  2. Kernel 启动后等了很久,使用 Spark 语句报错异常:A SparkSession instance named spark was desired but not present,可能是因为自定义镜像中,包含了 pyspark 内容。自定义镜像中,自定义镜像,禁止额外安装 pyspark。
  3. 若报错提示页面有相关报错详情链接,单击链接查看如果有存在描述信息:This user, tokenUser, group and psm is not on whitelist of queue xxxxx
    原因:任务对应用户缺失队列权限,申请相应队列权限后执行即可。

3 其他类型的 Kernel 异常报错:

3.1 重启

任务启动异常时,可稍等几分钟后,尝试重启 Kernel 操作,可能是因为资源紧张导致启动失败。若当前任务更新了镜像地址,需要保存任务后,再操作重启。

3.2 yarn resources unavailable

Q:如果报错信息提示:“yarn resources unavailable after 300 secondes”。可能原因如下:

  • 任务无法分配相应的队列资源,可能是存在队列资源不足情况。
  • 如果队列资源充足,检查启动时的 Spark 参数配置情况,看是否设置了较大的 driver/executor 资源,导致资源无法分配,如以下case:
    用户配置的spark参数:
    图片

A:解决方案

  • 调整 Spark 资源申请大小,或更换拥有更多资源的队列。
  • 如果队列资源充足,也没有申请大的资源,但还是启动异常时,您可通过提工单的方式,咨询 DataLeap 技术支持同学。

3.3 Token expired

Q:之前可以正常运行的代码,现在执行时报错:token expired。
A:任务所使用的 token 信息可能过期,您可尝试关闭 Kernel,并重新启动。

3.4 Kernel 状态显示为 starting

此状态可能存在以下三种情况:

  • Kernel 状态一直是 busy,突然变成 starting,是因为当前的 Python 进程过于忙碌,原先能够响应 client 的查询请求,开始中断响应,session 连接状态处理机制下,会存在自动 fallback 到 starting;
  • 刚打开页面,状态即为 starting,是因当前的 Python 进程过于忙碌,无法响应 client 的查询请求;
  • 其它网络问题,导致查询状态的 client 侧与执行节点连接不稳。

解决方案:

  • 如果是 Spark-Kernel 作业,可以尝试登陆 Spark的 driver 节点,排查当前 Python 进程具体在执行什么,详细排查过程可以谷歌搜索 Python 进程的性能分析等参考资料;
  • 如果是网络问题,可以重新刷新页面;
  • 进程如果确实还在运行中的话,可以等它处理完当前的业务,有余力响应 client 端后会恢复正常,可以刷新页面后获取到正确的 status。