关闭报错_0820CDSW在Session中运行代码超过一次就报错问题分析

问题描述

在CDSW中启动一个Session然后运行代码,第一次能够正常运行,在第一次运行完成后不关闭Session,在同一个Session中再次运行代码,此时就会出现报错,主要的报错信息为“Delegation Token can be issued only with kerberos or web authentication”,报错的截图如下:

cde7bb740856d177fcb143ffc3ac3cce.png

问题分析过程

由于这个报错出现在CDSW服务中,因此首先需要确认是CDSW侧导致的问题还是CDH侧导致的问题。

针对报错的Session,到CDSW所在服务器通过kubectl命令获取到Session的日志,在日志中并无报错的信息,日志截图如下:

1a39d7281d3b64e8ed5488711b0d57ba.png

在Session日志中没有查看到有效信息的情况下,在启动Session的Terminal中执行了两次同样的代码,第二次依然报错;在这之后,在CDSW的Master节点,通过启动pyspark-shell命令行的方式提交了两次同样的代码,第二次和之前一样报错,通过上面的测试,我们可以得出该问题与CDSW无关,由于报错的作业类型是PySpark,因此我们将问题的重点转移到CDH集群的Spark上,目前报错的环境使用的Spark版本是Spark2.2.0-cloudera1,下面针对Spark来分析该问题。

通过报错信息分析是与认证相关的报错,通过查询资料在Apache官网上找到了相关的jira,编号为SPARK-21890,链接如下:

https://issues.apache.org/jira/browse/SPARK-21890

该jira描述Spark Client已经拥有了hdfs token,但是Spark Client本身无法感知到该hdfs token已获取,因此还是会继续请求,同时hdfs credentials provider对于这种已有凭据的请求不会进行任何处理,因此导致了Delegation Token的报错,详情可以查阅上面的jira链接,同时该jira影响的版本是Spark2.2.0,与行内使用的Spark版本相符,在与Support沟通后,确认了问题是该jira导致。

问题处理结论

基于该问题是Spark版本的bug导致,因此从根本上解决该问题的方式是升级行内的Spark版本,目前行内所使用的Spark2.2.0是一个比较老的版本,该版本在CDH5.16.2上其实已经不支持了,参考下面链接:

https://docs.cloudera.com/documentation/spark2/latest/topics/spark2_requirements.html

目前行内的集群由于是从5.13升级上来的,因此还在继续使用该版本的Spark,建议将行内的Spark版本升级到Spark2.4,一方面来说Spark2.4是Spark2的最高版本,相比Spark2.2多了新特性以及一些bug的修复,同时行内之前也有业务人员提出过更高版本Spark的需求,另一方面CDH6以及目前CDP7.1.4打包的都是Spark2.4。

CDH中Spark各版本对应的fix可以参考下面的链接:

https://docs.cloudera.com/documentation/spark2/latest/topics/spark2_fixed_issues.html

在进行Spark版本升级之前,如果遇到多次执行代码时遇到该报错,那么停止当前Session后,重新打开一个新的Session再运行代码即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值