当前位置: 首页 > 知识库问答 >
问题:

在缓存中找不到Hdfs委派令牌-Spark应用程序中出错

齐英朗
2023-03-14

我在Spark版本2.3.0中有一个简单的Spark流应用程序,它将每个处理批次的结果放在HDFS上。我的应用程序运行在部署模式客户端的Thread上,我使用的是kerberized hadoop集群(hadoop2.6.0-cdh5.9.3)。我在spark submit命令中设置了--principal和--keytab。

几天后,我的应用程序无法在HDFS上写入,因为缓存中缺少委托令牌。重新启动应用程序后,流式传输正常工作,但几天后由于同样的原因再次失败。

这是来自驱动程序的日志:

ERROR JobScheduler: Error running job streaming job 1528366650000 ms.0
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.token.SecretManager$InvalidToken): token (token for spark_online: HDFS_DELEGATION_TOKEN owner=spark@DCWP, renewer=yarn, realUser=, issueDate=1528232733578, maxDate=1528837533578, sequenceNumber=14567778, masterKeyId=1397) can't be found in cache

当我添加到应用程序配置spark时,问题就可以解决了。hadoop。fs。hdfs。实施。使残废cache=true,但禁用缓存对处理性能有很大影响。

如果有人能帮助我,我将不胜感激!

共有1个答案

晁聪
2023-03-14

您的kerberos票证可能需要刷新(这就是为什么当您重新启动它时它会工作)。

Kerberos票证的生存期对这两个设置有一个相当不错的介绍,特别是您需要了解的设置。

  • 选项1:将生命周期设置为更长的时间
  • 选项2:有第二个进程,只要您需要它,它就会在后台启动

我更喜欢选项1,使用30天左右。这是一种很好的跟踪“我最后一次重新启动该服务是什么时候”的方法。

 类似资料:
  • 我有一个集群,我可以成功启动,至少这是出现在web UI上,我在其中看到这些信息 我收到这个消息 使用REST应用程序提交协议运行Spark。使用Spark默认的log4j配置文件:org/apache/spark/log4j-defaults.properties 16/08/31 16:59:06 INFO restsubmissionclient:提交请求以在Spark://name25:6

  • 我正在尝试使用bin/spark-submit运行一个spark应用程序。当我引用本地文件系统中的应用程序jar时,它会正常工作。但是,当我将我的应用程序jar复制到hdfs中的一个目录时,我得到了以下异常: 我使用的是hadoop版本2.6.0和spark版本1.2.1

  • 我有一个Spring boot应用程序,我想在它的存储库方法上使用Spring bot cache。我在Spring boot应用程序中指定了@enablecaching annotaion,当我试图在我的存储库方法上使用@cacheable annotation时,它会抛出如下错误 java.lang.IllegalArgumentException:找不到Builder的名为“cache”的缓

  • 我正在尝试从应用程序服务中获取Google的刷新令牌,但我不能。 日志说 2016-11-04T00:04:25 PID[500]收到的详细请求:获取https://noteappsvr.azurewebsites.net/.auth/login/google?access _ type = offline 2016-11-04t 00:04:25 PID[500]从https://account

  • 我使用这个代码示例:https://github.com/azure-samples/active-directory-dotnet-graphapi-web,我知道这个代码示例使用的是客户端库,但是如果我想要执行查询(使用httpclient)直接使用api调用,我使用下面的代码从缓存中获取访问令牌:

  • 我们做的有点奇怪。我们在.NET中使用Java Saxon,通过使用IKVM和所有其他Java代码对其进行编译。在命令行应用程序中,它工作得很好。 但在我们的Windows窗体应用程序中使用所有这些,我们可以: 显然,问题是com.sun.org.*在IKVM创建的DLL中找不到任何位置。对我来说奇怪的是命令行应用程序有效,而不是表单应用程序失败。 问题是,如何将com.sun.org.*包含在I