【Flink系列十八】HDFS_DELEGATION_TOKEN過期的問題解決彙總

問題類別

  • Spark框架自身的問題
  • Hadoop全家桶的問題
  • 開發者通過Hive,HDFS,HBASE訪問HDFS的問題

排查

  1. 已知Hadoop-common-2.6.0的UGI存在bug,代碼爲HADOOP-10786,該問題在CDH發行版中已經修復,但Apache版本存在問題。
  2. 已知HDFS也存在一個HDFS_DELEGATION_TOKEN過期的bug,代碼爲HDFS-9276,問題在CDH發行版中已經修復,但Apache版本存在問題。
  3. 已知Spark還存在一個HDFS_DELEGATION_TOKEN過期的bug,代碼爲SPARK-23361,該問題會導致Driver重啓後,如果超過7天,就會掛掉一次。

以上CDH發行版特指 2.6.0-CDH5.12.1,相對的Apache發行版版本爲2.6.0

方法

  • 首先,確保用的Apache庫沒有問題,才能安全地長期運行Spark,Flink等 long-running applications,其次再排查手動使用Hadoop HDFS庫的方式,才能訪問HDFS,Hbase, Hive等,才能確保程序不會掛掉
  • 確保使用 Hadoop-common-2.6.0-CDH5.12.1以及其他Hadoop有關的包,保證框架層面不會有問題
  • 要麼升級版本到沒有BUG的hadoop庫的版本,才能繼續使用Apache全家桶

案例

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.token.SecretManager$InvalidToken): token (token for research: HDFS_DELEGATION_TOKEN [email protected], renewer=yarn, realUser=, issueDate=1690268368213, maxDate=1690873168213, sequenceNumber=211804054, masterKeyId=2078) is expired, current time: 2023-08-01 15:00:20,416+0800 expected renewal time: 2023-08-01 14:59:28,213+0800
	at org.apache.hadoop.ipc.Client.call(Client.java:1504)
	at org.apache.hadoop.ipc.Client.call(Client.java:1441)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230)
	at com.sun.proxy.$Proxy10.getFileInfo(Unknown Source)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:771)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:260)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)
	at com.sun.proxy.$Proxy11.getFileInfo(Unknown Source)
	at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:2126)
	at org.apache.hadoop.hdfs.DistributedFileSystem$20.doCall(DistributedFileSystem.java:1262)
	at org.apache.hadoop.hdfs.DistributedFileSystem$20.doCall(DistributedFileSystem.java:1258)
	at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
	at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1258)
	at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:425)
	at org.apache.hadoop.fs.viewfs.ChRootedFileSystem.getFileStatus(ChRootedFileSystem.java:226)
	at org.apache.hadoop.fs.viewfs.ViewFileSystem.getFileStatus(ViewFileSystem.java:379)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章