无法获取 Master Kerberos 主体以用作 Talend Batch 作业的续订者

问题描述 投票:0回答:3

我们正在尝试使用 talend 批处理 (spark) 作业来访问 Kerberos 集群中的配置单元,但我们收到以下“无法获取主 Kerberos 主体以用作更新程序”错误。

enter image description here

通过使用 talend 中的标准作业(非 Spark),我们可以毫无问题地访问 Hive。

以下是观察结果:

  1. 当我们运行 Spark 作业时,talend 可以连接到 Hive 元存储并验证语法。例如,如果我提供了错误的表格 名称它确实返回“找不到表”。
  2. 当我们从没有数据的表中选择 count(*) 时,它会返回 “NULL”,但如果 Hdfs(表)中存在某些数据,则失败并出现错误 “无法获取 Master Kerberos 主体用作续订者”。

我不确定到底是什么问题导致了令牌问题。有人可以帮助我们了解根本原因吗?

如果我使用 Spark 批处理作业读取/写入 hdfs,那么除了 hive 之外还需要添加一件事,所以唯一的问题是 hive 和 Kerberos。

hadoop apache-spark kerberos talend
3个回答
1
投票

您应该将 hadoop 配置包含在类路径 (:/path/hadoop-configuration) 中。您应该包含该 hadoop 配置目录中的所有配置文件,而不仅仅是 core-site.xml 和 hdfs-site.xml 文件。这发生在我身上,解决了问题。


1
投票

当我在 k8s 上启动 Spark 时遇到同样的问题,

py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.             
: java.io.IOException: Can't get Master Kerberos principal for use as renewer                                                                               
        at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:133)                                                                                                                                                                                                         
        at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:100)                                                                                                                                                                                                         
        at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodes(TokenCache.java:80)                           
        at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:243)                             
        at org.apache.spark.input.WholeTextFileInputFormat.setMinPartitions(WholeTextFileInputFormat.scala:52)                                              
        at org.apache.spark.rdd.WholeTextFileRDD.getPartitions(WholeTextFileRDD.scala:54)                                                                   
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:273)                                                    
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:269)                                                                              
        at scala.Option.getOrElse(Option.scala:121)                                                                                                         
        at org.apache.spark.rdd.RDD.partitions(RDD.scala:269)

我只需将

yarn-site.xml
添加到
HADOOP_CONFIG_DIR

yarn-site.xml
仅包含
yarn.resourcemanager.principal

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
 <property>
    <name>yarn.resourcemanager.principal</name>
    <value>yarn/[email protected]</value>
  </property>
</configuration>

这对我有用。


0
投票

如果它是一个新集群,并且是yarn作业,请确保您已将mr-framework上传到hdfs中的/user/yarn/mapreduce/mr-framewor。 如果该路径丢失,所有纱线作业都将失败并出现以下错误: 错误: java.io.IOException:无法获取主 Kerberos 主体用作更新程序

$ hdfs dfs -put 3.1.1.7.1.7.2032-1-mr-framework.tar.gz /user/yarn/mapreduce/mr-framework

© www.soinside.com 2019 - 2024. All rights reserved.