【问题标题】:spark-submit failing to connect to metastore due to Kerberos : Caused by GSSException: No valid credentials provided . but works in local-client modespark-submit 由于 Kerberos 无法连接到 Metastore:由 GSSException 引起:未提供有效凭据。但在本地客户端模式下工作
【发布时间】:2020-08-24 19:42:43
【问题描述】:

看来,在本地客户端模式下的 docker pyspark shell 中正在工作并且能够连接到 hive。但是,发出带有所有依赖项的 spark-submit 失败并出现以下错误。

20/08/24 14:03:01 INFO storage.BlockManagerMasterEndpoint: Registering block manager test.server.com:41697 with 6.2 GB RAM, BlockManagerId(3, test.server.com, 41697, None)
20/08/24 14:03:02 INFO hive.HiveUtils: Initializing HiveMetastoreConnection version 1.2.1 using Spark classes.
20/08/24 14:03:02 INFO hive.metastore: Trying to connect to metastore with URI thrift://metastore.server.com:9083
20/08/24 14:03:02 ERROR transport.TSaslTransport: SASL negotiation failure
javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
        at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211)
        at org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94)
        at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:271)

在 pyspark 上运行一个简单的 pi 示例可以正常工作,没有 kerberos 问题,但是在尝试访问 hive 时出现 kerberos 错误。

Spark 提交命令:

spark-submit --master yarn --deploy-mode cluster --files=/etc/hive/conf/hive-site.xml,/etc/hive/conf/yarn-site.xml,/etc/hive/conf/hdfs-site.xml,/etc/hive/conf/core-site.xml,/etc/hive/conf/mapred-site.xml,/etc/hive/conf/ssl-client.xml  --name fetch_hive_test --executor-memory 12g --num-executors 20 test_hive_minimal.py

test_hive_minimal.py 是一个简单的 pyspark 脚本,用于显示测试数据库中的表:

from pyspark.sql import SparkSession
#declaration
appName = "test_hive_minimal"
master = "yarn"
# Create the Spark session
sc = SparkSession.builder \
    .appName(appName) \
    .master(master) \
    .enableHiveSupport() \
    .config("spark.hadoop.hive.enforce.bucketing", "True") \
    .config("spark.hadoop.hive.support.quoted.identifiers", "none") \
    .config("hive.exec.dynamic.partition", "True") \
    .config("hive.exec.dynamic.partition.mode", "nonstrict") \
    .getOrCreate()
# Define the function to load data from Teradata
#custom freeform query
sql = "show tables in user_tables"
df_new = sc.sql(sql)
df_new.show()
sc.stop()

谁能告诉我如何解决这个问题? kerberos票不是由yarn自动管理的吗?所有其他 hadoop 资源都可以访问。

更新: 在 docker 容器上共享 vol mount 并将 keytab/principal 与 hive-site.xml 一起传递以访问 Metastore 后问题已得到解决。

spark-submit --master yarn \
--deploy-mode cluster \
--jars /srv/python/ext_jars/terajdbc4.jar \
--files=/etc/hive/conf/hive-site.xml \
--keytab /home/alias/.kt/alias.keytab \ #this is mounted and kept in docker local path 
--principal alias@realm.com.org \
--name td_to_hive_test \
--driver-cores 2 \
--driver-memory 2G \
--num-executors 44 \
--executor-cores 5 \
--executor-memory 12g \
td_to_hive_test.py

【问题讨论】:

    标签: apache-spark hadoop pyspark cloudera


    【解决方案1】:

    我认为您的司机有罚单,但您的执行人不是这样。将以下参数添加到您的 spark 提交中:

    • --principal : 你可以通过这种方式获取 principal : klist -k
    • --keytab : keytab 的路径

    更多信息:https://spark.apache.org/docs/latest/running-on-yarn.html#yarn-specific-kerberos-configuration

    【讨论】:

    • 谢谢。我确实尝试将我自己的主体和 keytab 作为参数传递给 spark-submit,但它给出了不同的错误。公平地说,它类似于“TOKEN KIND 错误”。我有什么特别的格式吗?此外,我正在使用 pyspark 2.4.6 和 cdh 5.13,它同时具有 spark 1.6 和 2。文档适用于 3.0.0。
    【解决方案2】:

    您可以在集群上运行作业时尝试以下命令行属性吗?

    -Djavax.security.auth.useSubjectCredsOnly=false
    

    您可以将上述属性添加到 Spark 提交命令中

    【讨论】:

    • 嘿 Vijay,你希望它如何通过?如 --conf spark.executor.extraJavaOptions 或 spark.driver.extraJavaOptions?或作为 --driver-java-options "-Djavax.security.auth.useSubjectCredsOnly=false" ?我现在正在尝试
    • 我尝试使用执行程序和驱动程序 extraJavaOpts 运行,但出现以下错误:javax.security.sasl.SaslException:GSS 启动失败 [由 GSSException 引起:未提供有效凭据(机制级别:尝试获取新的凭据) INITIATE 凭据失败!(null))] 在 com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211) 在 org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94)
    猜你喜欢
    • 2020-04-02
    • 2015-11-19
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多