- 写在最前面:可以尝试去掉所有参数+镜像试试看!!!以便于先排除镜像或者参数问题
1 Spark-Kernel 类型启动失败可能的原因:
- 使用自定义镜像,镜像有 Spark/Notebook 相关 Python 包,可能会引起基础环境有问题,导致 Kernel 无法启动,您可尝试去除自定义镜像,使用默认镜像启动。
- 当前登陆用户缺少当前队列权限、队列资源紧张,可尝试更换队列启动。
- 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 类型启动失败可能的原因:
- 使用自定义镜像,镜像有 Notebook 相关 Python 包,可能会引起基础环境有问题,导致 Kernel 无法启动,您可尝试去除自定义镜像,使用默认镜像启动。
- Kernel 启动后等了很久,使用 Spark 语句报错异常:
A SparkSession instance named spark was desired but not present
,可能是因为自定义镜像中,包含了 pyspark 内容。自定义镜像中,自定义镜像,禁止额外安装 pyspark。 - 若报错提示页面有相关报错详情链接,单击链接查看如果有存在描述信息:
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。