重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编给大家分享一下CDSW在Session中运行代码超过一次就报错怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
创新互联建站是一家以网站建设公司、网页设计、品牌设计、软件运维、网站推广、小程序App开发等移动开发为一体互联网公司。已累计为iso认证等众行业中小客户提供优质的互联网建站和软件开发服务。
在CDSW中启动一个Session然后运行代码,第一次能够正常运行,在第一次运行完成后不关闭Session,在同一个Session中再次运行代码,此时就会出现报错,主要的报错信息为“Delegation Token can be issued only with kerberos or web authentication”,报错的截图如下:
由于这个报错出现在CDSW服务中,因此首先需要确认是CDSW侧导致的问题还是CDH侧导致的问题。
针对报错的Session,到CDSW所在服务器通过kubectl命令获取到Session的日志,在日志中并无报错的信息,日志截图如下:
在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再运行代码即可。
以上是“CDSW在Session中运行代码超过一次就报错怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!